树– QTreeWidget –QT学习笔记

 

http://www.satsuns.com/qt/1123.html

 

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

treewidget.h

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

treewidget.cpp

01#include "treewidget.h"
02  
03TreeWidget::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("Leaf 1")));
09        root->addChild(leaf);
10        QTreeWidgetItem *leaf2 = new QTreeWidgetItem(root, QStringList(QString("Leaf 1")));
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文档。这个构造函数的签名如下:

1QTreeWidgetItem::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到top items。这里可以想象到,由于这个树组件可以由多个根组成(严格来说这已经不是树了,不过姑且还是叫树吧),所以我们传进来的是一个list。


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

01#include "listwidget.h"
02  
03TreeWidget::TreeWidget()
04{
05        tree = new QTreeWidget(this);
06        tree->setColumnCount(2);
07        QStringList headers;
08        headers << "Name" << "Number";
09        tree->setHeaderLabels(headers);
10        QStringList rootTextList;
11        rootTextList << "Root" << "0";
12        QTreeWidgetItem *root = new QTreeWidgetItem(tree, rootTextList);
13        QStringList leafTextList;
14        leafTextList << "Leaf 1" << "1";
15        QTreeWidgetItem *leaf = new QTreeWidgetItem(root, leafTextList);
16        root->addChild(leaf);
17        QStringList leaf2TextList;
18        leaf2TextList << "Leaf 2" << "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()函数将这个功能隐藏掉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值