QTreeWidget简单使用之一

详细描述

QTreeWidget类提供了使用预定义树模型的树视图。

QTreeWidget类是一个方便的类,它提供了一个标准树小部件,它具有一个经典的基于项目的接口,类似于Qt 3中的QListView类所使用的接口。这个类基于Qt的模型/视图架构,并使用默认模型来保存项目,每个项目都是一个QTreeWidgetItem。

不需要模型/视图框架灵活性的开发人员可以很容易地使用该类来创建简单的层次结构列表。更灵活的方法是将QTreeView与标准项目模型相结合。这允许将数据的存储与它的表示分离开来。

在最简单的形式中,可以通过以下方式构造树小部件::
  QTreeWidget *treeWidget = new QTreeWidget();
  treeWidget->setColumnCount(1);
  QList<QTreeWidgetItem *> items;
  for (int i = 0; i < 10; ++i)
      items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
  treeWidget->insertTopLevelItems(0, items);

在将项添加到tree小部件之前,必须用setColumnCount()设置列数。这允许每个项目有一个或多个标签或其他装饰。可以在columnCount()函数中找到使用的列数。

该树可以有一个标题,其中包含小部件中每个列的部分。通过向setheaderlabel()提供字符串列表,为每个部分设置标签是最容易的,但是可以用QTreeWidgetItem构造一个自定义头,并将setHeaderItem()函数插入到树中。

根据预定义的排序顺序,树中的项可以按列排序。如果启用排序,用户可以通过单击列标题对项进行排序。可以通过调用setSortingEnabled()来启用或禁用排序。isSortingEnabled()函数的作用是:显示是否启用了排序。

示例代码

#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QHeaderView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTreeWidget* treeWidget = new QTreeWidget();

    //清空树控件的内容
    treeWidget->clear();
    //隐藏树头
    treeWidget->header()->hide();
    //设置标题
    treeWidget->setWindowTitle("QTreeWidget 简单使用");
    //设置触发编辑条件为无(默认)
    treeWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);


    //第一种写法:直接指明item的父控件是treeWidget
    /*QTreeWidgetItem* diskCitem = new QTreeWidgetItem(treeWidget,QStringList()<<"本地磁盘(C)") ;
    QTreeWidgetItem* diskDitem = new QTreeWidgetItem(treeWidget,QStringList()<<"软件(D)") ;
    QTreeWidgetItem* diskEitem = new QTreeWidgetItem(treeWidget,QStringList()<<"文档(E)") ;
    QTreeWidgetItem* diskFitem = new QTreeWidgetItem(treeWidget,QStringList()<<"娱乐(F)") ;*/
    //第二种写法:调用addTopLevelItem()API将item添加到treeWidget
    QTreeWidgetItem* diskCitem = new QTreeWidgetItem(QStringList()<<"本地磁盘(C)") ;
    QTreeWidgetItem* diskDitem = new QTreeWidgetItem(QStringList()<<"软件(D)") ;
    QTreeWidgetItem* diskEitem = new QTreeWidgetItem(QStringList()<<"文档(E)") ;
    QTreeWidgetItem* diskFitem = new QTreeWidgetItem(QStringList()<<"娱乐(F)") ;
    treeWidget->addTopLevelItem(diskCitem);
    treeWidget->addTopLevelItem(diskDitem);
    treeWidget->addTopLevelItem(diskEitem);
    treeWidget->addTopLevelItem(diskFitem);
    diskCitem->setIcon(0,QIcon(":/res/diskIcon"));
    diskDitem->setIcon(0,QIcon(":/res/diskIcon"));
    diskEitem->setIcon(0,QIcon(":/res/diskIcon"));
    diskFitem->setIcon(0,QIcon(":/res/diskIcon"));

    QTreeWidgetItem* cppItem = new QTreeWidgetItem(QStringList()<<"C++");
    QTreeWidgetItem* javaItem = new QTreeWidgetItem(QStringList()<<"Java");
    QTreeWidgetItem* pyItem = new QTreeWidgetItem(QStringList()<<"Python");
    diskCitem->addChild(cppItem);
    diskCitem->addChild(javaItem);
    diskCitem->addChild(pyItem);
    cppItem->setIcon(0,QIcon(":/res/fileIcon"));
    javaItem->setIcon(0,QIcon(":/res/fileIcon"));
    pyItem->setIcon(0,QIcon(":/res/fileIcon"));

    QTreeWidgetItem* qqItem = new QTreeWidgetItem(QStringList()<<"腾讯QQ");
    QTreeWidgetItem* weChatItem = new QTreeWidgetItem(QStringList()<<"微信");
    QTreeWidgetItem* sinaItem = new QTreeWidgetItem(QStringList()<<"新浪");
    diskDitem->addChild(qqItem);
    diskDitem->addChild(weChatItem);
    diskDitem->addChild(sinaItem);
    qqItem->setIcon(0,QIcon(":/res/fileIcon"));
    weChatItem->setIcon(0,QIcon(":/res/fileIcon"));
    sinaItem->setIcon(0,QIcon(":/res/fileIcon"));

    QTreeWidgetItem* mv1Item = new QTreeWidgetItem(QStringList()<<"《葫芦娃》");
    QTreeWidgetItem* mv2Item = new QTreeWidgetItem(QStringList()<<"《西游记》");
    QTreeWidgetItem* mv3Item = new QTreeWidgetItem(QStringList()<<"《水浒传》");
    diskEitem->addChild(mv1Item);
    diskEitem->addChild(mv2Item);
    diskEitem->addChild(mv3Item);
    mv1Item->setIcon(0,QIcon(":/res/fileIcon"));
    mv2Item->setIcon(0,QIcon(":/res/fileIcon"));
    mv3Item->setIcon(0,QIcon(":/res/fileIcon"));

    QTreeWidgetItem* song1Item = new QTreeWidgetItem(QStringList()<<"小苹果");
    QTreeWidgetItem* song2Item = new QTreeWidgetItem(QStringList()<<"最炫名族风");
    QTreeWidgetItem* song3Item = new QTreeWidgetItem(QStringList()<<"荷塘月色");
    diskFitem->addChild(song1Item);
    diskFitem->addChild(song2Item);
    diskFitem->addChild(song3Item);
    song1Item->setIcon(0,QIcon(":/res/fileIcon"));
    song2Item->setIcon(0,QIcon(":/res/fileIcon"));
    song3Item->setIcon(0,QIcon(":/res/fileIcon"));

    //展开所有的子项目
    treeWidget->expandAll(); //要在设置完子项目之后再调用才有效

    treeWidget->show();
    return a.exec();
}

最顶层的项用addTopLevelItem()函数来加入,每个项的子项用addChild()函数来加入。


运行结果截图



源代码下载地址:QTreeWidget简单使用

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值