首页| 论坛| 消息

标题:Qt QTreeWidget 树形结构实现
作者:一梦
日期:2013-09-07 17:02
内容:

转自 http://www.cnblogs.com/Romi/archive/2012/04/16/2452709.html
Qt中实现树形结构可以使用QTreeWidget类,也可以使用QTreeView类,QTreeWidget继承自QTreeView类。树形效果如下图所示:

这是怎么实现的呢?还有点击节点时会有相应的事件响应。
1. 树形结构实现
QT GUI中有treeWidget部件,将该控件在Gui中布局好,假设其对象名为treeWidget。
QTreeWidget类官方文档:http://qt-project.org/doc/qt-4.8/qtreewidget.html
树形结构通过QTreeWidget类和QTreeWidgetItem类实现,QTreeWidgetItem类实现结点的添加。上图代码实现如下:


ui->treeWidget->setColumnCount(1); //设置列数
ui->treeWidget->setHeaderLabel(tr("图像选择")); //设置头的标题
QTreeWidgetItem *imageItem1 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("图像1")));
imageItem1->setIcon(0,QIcon("xxx.png"));
QTreeWidgetItem *imageItem1_1 = new QTreeWidgetItem(imageItem1,QStringList(QString("Band1"))); //子节点1
imageItem1->addChild(imageItem1_1); //添加子节点
QTreeWidgetItem *imageItem2 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("图像2")));
QTreeWidgetItem *imageItem2_1 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band1"))); //子节点1
QTreeWidgetItem *imageItem2_2 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band2"))); //子节点2
imageItem2->addChild(imageItem2_1);//添加子节点
imageItem2->addChild(imageItem2_2);
ui->treeWidget->expandAll(); //结点全部展开
当然,还有其他的一些方法用于设置,具体需要时查查帮助文档学习。
除了使用上面这种方法之外,还可以使用QList & items实现结点的添加。QT中对C++中的STL库中的容器使用进行了封装,使用其封装的类可以很方便的解决很多类似很复杂数据结构的问题。实现如下:

//只写结点的实现
QList rootList;
QTreeWidgetItem *imageItem1 = new QTreeWidgetItem; //添加第一个父节点
imageItem1->setText(0,tr("图像1"));
rootList.append(imageItem1);
QTreeWidgetItem..


#1 [一梦 09-07 17:03]
图怎么没有转过来呢
#2 [gaga0313 09-09 12:29]
这个不错 正要了解这方面的知识
.
#3 [embeddedking 09-24 17:51]
楼主好人啊,慢慢消化理解了。
能请教个Qt的问题么?

回复 发表
主题 版块