您的位置:首页 > 编程语言 > Qt开发

树– QTreeWidget –QT学习笔记

2011-06-22 23:48 423 查看
http://www.satsuns.com/qt/1123.html

QTreeWidget。顾名思义,这个类用来展示树型结构。同前面说的QListWidget类似,这个类需要同另外一个辅助类QTreeWidgetItem一同使用。不过,既然是提供方面的封装类,即便是看上去很复杂的树,在使用这个类的时候也是显得比较简单的。当不需要使用复杂的QTreeView的特性的时候,我们可以直接使用QTreeWidget代替。

treewidget.h

01
#ifndefTREEWIDGET_H
02
#defineTREEWIDGET_H
03
04
#include<QtGui>
05
06
class
TreeWidget:
public
QWidget
07
{
08
public
:
09
TreeWidget();
10
11
private
:
12
QTreeWidget*tree;
13
};
14
15
#endif//TREEWIDGET_H
treewidget.cpp

01
#include"treewidget.h"
02
03
TreeWidget::TreeWidget()
04
{
05
tree=
new
QTreeWidget(
this
);
06
tree->setColumnCount(1);
07
QTreeWidgetItem*root=
new
QTreeWidgetItem(tree,QStringList(QString(
"Root"
)));
08
QTreeWidgetItem*leaf=
new
QTreeWidgetItem(root,QStringList(QString(
"Leaf1"
)));
09
root->addChild(leaf);
10
QTreeWidgetItem*leaf2=
new
QTreeWidgetItem(root,QStringList(QString(
"Leaf1"
)));
11
leaf2->setCheckState(0,Qt::Checked);
12
root->addChild(leaf2);
13
QList<QTreeWidgetItem*>rootList;
14
rootList<<root;
15
tree->insertTopLevelItems(0,rootList);
16
}
首先,我们在构造函数里面创建了一个QTreeWidget的实例。然后我们调用setColumnCount()函数设定栏数。这个函数的效果我们以后再看。然后我们要向QTreeWidget添加QTreeWidgetItem。QTreeWidgetItem有九个重载的构造函数。我们在这里只是来看看其中的一个,其余的请自行查阅API文档。这个构造函数的签名如下:

1
QTreeWidgetItem::QTreeWidgetItem(QTreeWidget*parent,
const
QStringList&strings,
int
type=Type);
这里有3个参数,第一个参数用于指定这个item属于哪一个树;第二个参数是指定这个item显示的文字;第三个参数用于指定这个item的类型。Type有两个可行的取值:QTreeWidgetItem::Type和QTreeWidgetItem::UserType,由于我们并没有定义用户类型,所以只使用其默认值即可。这里你会奇怪,第二个参数为什么是一个QStringList类型的,而不是QString类型的?我们先不去管它,继续下面的代码。

后面我们又创建了一个QTreeWidgetItem,注意它的第一个参数不是QTreeWidget而是QTreeWidgetItem类型的,这就把它的父节点设置为前面我们定义的root了。然后我们使用了setCheckState()函数,让它变得可以选择,最后使用addChild()函数把它添加进来。

最后一步,我们创建了一个QList类型,前面的root添加进去,然后insert到topitems。这里可以想象到,由于这个树组件可以由多个根组成(严格来说这已经不是树了,不过姑且还是叫树吧),所以我们传进来的是一个list。




样子同我们想象的基本一致,只是这个树的头上怎么会有一个1?还记得我们跳过去的那个函数吗?下面我们修改一下代码看看:

01
#include"listwidget.h"
02
03
TreeWidget::TreeWidget()
04
{
05
tree=
new
QTreeWidget(
this
);
06
tree->setColumnCount(2);
07
QStringListheaders;
08
headers<<
"Name"
<<
"Number"
;
09
tree->setHeaderLabels(headers);
10
QStringListrootTextList;
11
rootTextList<<
"Root"
<<
"0"
;
12
QTreeWidgetItem*root=
new
QTreeWidgetItem(tree,rootTextList);
13
QStringListleafTextList;
14
leafTextList<<
"Leaf1"
<<
"1"
;
15
QTreeWidgetItem*leaf=
new
QTreeWidgetItem(root,leafTextList);
16
root->addChild(leaf);
17
QStringListleaf2TextList;
18
leaf2TextList<<
"Leaf2"
<<
"2"
;
19
QTreeWidgetItem*leaf2=
new
QTreeWidgetItem(root,leaf2TextList);
20
leaf2->setCheckState(0,Qt::Checked);
21
root->addChild(leaf2);
22
QList<QTreeWidgetItem*>rootList;
23
rootList<<root;
24
tree->insertTopLevelItems(0,rootList);
25
}
我们把columnCount设为2,然后传入的QStringList对应的有2个元素。这样再来运行一下:




原来这个columnCount就是用于在列表中显示树的!这样,你就可以很容易的将树和列表结合在一起,从而实现类似Windows资源管理器的界面。当然,如果你不需要显示这个header,可以调用setHeaderHidden()函数将这个功能隐藏掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: