QTreeWidget的一些基本操作

1.insertTopLevelItems,insertTopLevelItem用来添加顶层的item

QTreeWidget *treeWidget = new QTreeWidget(this);//创建
treeWidget->setColumnCount(); //设置列
treeWidget->setHeaderLabel(tr("item tree")); //设置标题
treeWidget->setGeometry(,,this->width(),this->height()); //设置大小
QList<QTreeWidgetItem *> items; //创建两个节点
QTreeWidgetItem *fItem1 = new QTreeWidgetItem(treeWidget,QStringList(QString("f1")));
QTreeWidgetItem *fItem2 = new QTreeWidgetItem(treeWidget,QStringList(QString("f2"))); items.append(fItem1);
items.append(fItem2);
//添加顶层节点
treeWidget->insertTopLevelItems(,items);
//节点始终保持展开
treeWidget->setItemsExpandable(false);
treeWidget->expandAll();

2.父节点通过addChild增加子节点

//创建子节点
QTreeWidgetItem *fItem1a = new QTreeWidgetItem(fItem1,QStringList(QString("f1a")));
QTreeWidgetItem *fItem1b = new QTreeWidgetItem(fItem1,QStringList(QString("f1b"))); QTreeWidgetItem *fItem2a = new QTreeWidgetItem(fItem2,QStringList(QString("f2a")));
QTreeWidgetItem *fItem2b = new QTreeWidgetItem(fItem2,QStringList(QString("f2b"))); //添加字节点
fItem1->addChild(fItem1a);
fItem1->addChild(fItem1b); fItem2->addChild(fItem2a);
fItem2->addChild(fItem2b);

3.建立鼠标点击右键点击信号检测

//检测点击事件
connect(treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(itemClick(QTreeWidgetItem*,int)));
//检测鼠标右键
treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(treeWidget,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(popMenu(const QPoint&)));

4.槽函数

void Widget::itemClick(QTreeWidgetItem *item, int column)
{
QTreeWidgetItem *parent = item->parent(); //获取父节点
if(NULL==parent) //注意:最顶端项是没有父节点的
return;
int col = parent->indexOfChild(item); //item在父项中的节点行号(从0开始)
} //弹出菜单
void Widget::popMenu(const QPoint &)
{
QTreeWidgetItem* curItem=treeWidget->currentItem(); //**获取当前被点击的节点
if(curItem == NULL || curItem->parent() == NULL)
return; //右键的位置在空白位置右击或者点击的是顶层item //创建一个action
QAction deleteItem(QString::fromLocal8Bit("&删除"),this);
connect(&deleteItem, SIGNAL(triggered()), this, SLOT(deleteItem()));
QPoint pos;
//创建一个菜单栏
QMenu menu(treeWidget);
menu.addAction(&deleteItem);
menu.exec(QCursor::pos()); //在当前鼠标位置显示
} //删除item
void Widget::deleteItem()
{
QTreeWidgetItem* curItem=treeWidget->currentItem();
curItem->parent()->removeChild(treeWidget->currentItem());
}

Qt之QTreeWidget入门的更多相关文章

  1. [Qt Creator 快速入门] 第5章 应用程序主窗口

    对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点 ...

  2. [Qt Creator 快速入门] 第2章 Qt程序编译和源码详解

    一.编写 Hello World Gui程序 Hello World程序就是让应用程序显示"Hello World"字符串.这是最简单的应用,但却包含了一个应用程序的基本要素,所以 ...

  3. [Qt Creator 快速入门] 第1章 Qt Creator简介

    Qt Creator 是一个跨平台的.完整的 Qt 集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具.集成的上下文相关的帮助系统.图形化调试器.代码管理和浏览工具等.这一章先对 Qt ...

  4. Qt安装与入门

    一.Qt SDK1.2安装 准备QtSdk-offline-win-x86-v1_2_1.exe离线安装包. 安装QtSDK时注意不要有中文路径,空格以及特殊字符.可以自定义选择组件安装,也可以默认安 ...

  5. Qt 动画快速入门(一)

    Qt-4.6动画Animation快速入门三字决 Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序.不必像以前的版本一样,所有的控件都枯燥的呆在伟 ...

  6. 《QT Creator快速入门》

    ui中的类,这样使用无法通过调试: Ui::Dialog ui(&w); w.show(); 而需要改成: Ui::Dialog ui; ui.setupUi(&w); w.show( ...

  7. QT学习:入门篇(三)

    头文件: #ifndef CChatDisplaySet_h #define CChatDisplaySet_h #include "QtGui/QDialog" #include ...

  8. QT Creator 快速入门教程 读书笔记(一)

    一 Qt简介 Qt 是一个跨平台的C++应用程序框架,支持Windows.Linux.Mac OS X.Android.iOS.Windows Phone.嵌入式系统等.也就是说,Qt 可以同时支持桌 ...

  9. QT Creator 快速入门教程 读书笔记(二)

    一 窗口部件 基础窗口部件QWidget类是所有用户界面对象的基类,窗口和控件都是直接或间接继承自 QWidget,下面我们来看一个很简单的例子: 窗口部件(Widget)简称部件,是QT中建立界面的 ...

随机推荐

  1. JdbcTemplate 配置多数据源(完全照抄,完整)

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  2. 华莱士的 第二个python程序之(格式化输出)

    name = input("name:")age = input("age:")info ='''---------- info of %s --------- ...

  3. qt 利用 HTML 生成PDF文档,不能显示jpg图片

    利用 QPrinter 和html 生成 pdf文档 其中用html语句有显示图片的语句 但只能显示png格式的图片,不能显示jpg格式图片. 经过排查:语法,文件路径等都正确,最终在stack ov ...

  4. Heap Sort - recursion

    Heap Sort  Build a max heap using exsiting array, which is called Heapify Swap root with the last el ...

  5. String对象常量池特性对synchronized对象的影响

    一 .什么是String的常量池特性 对于字符串对象有两种创建方法,如下: 直接赋值法: String str1="直接赋值创建字符串"; 创建对象法: String str2=n ...

  6. python从零开始 -- 第2篇之python版本差异

    python从零开始 -- 第2篇之python版本差异 第0篇开始,咱们就说选择 python 3.x,一般来说,咱们面临选择的时候总是想了解更多一点,并且版本之间的对比能引申出很多有意思的故事和知 ...

  7. wireshark 无线抓包

    1)抓取无线网卡的数据包(类似有线,仅抓取本网卡的数据包,适用与windows,linux) 1.  打开菜单项“Capture”下的子菜单“Capture Options”选项: 2.  找到设置面 ...

  8. Oracle数据库:ORA-54013错误解决办法

    ORA-54013: 不允许对虚拟列执行 INSERT 操作 这是Oracle 11 的新特性 —— 虚拟列. 在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图 ...

  9. 集合或数组转成String字符串

    1.将集合转成String字符串 String s=""; for (int i = 0; i < numList.size(); i++) { if (s=="& ...

  10. flask中注册验证码和分页

    注册验证码.核心思路,替换注册页面的img标签的src属性. 1.准备好文件夹:captcha2.导包 from utils.captcha.captcha import captcha3.验证码生成 ...