QTreeWidget简单使用之一

详细描述

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

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

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

在最简单的形式中,可以通过以下方式构造树小部件::
  QTreeWidget *treeWidget = new QTreeWidget();
  treeWidget->setColumnCount(1);
  QList 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 
#include 
#include 
#include 

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简单使用之一_第1张图片

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

你可能感兴趣的:(Qt)