QTreeWidget 与 QTreeWidgetItem 【百度空间】

来源:互联网 发布:数据闭环是什么 编辑:程序博客网 时间:2024/06/06 22:26

 

 

 http://hi.baidu.com/taney/blog/item/2cf3f211bd876b16b9127b01.html

QTreeWidget 与 QTreeWidgetItem
2008-07-31 20:01

QTreeWidget类别提供树状的列示元件,可以显示多栏与树状结构,它与QTreeWidgetItem一同使用,使用 QTreeWidget时栏位标题题或是栏位名称是使用QStringList来设定,例如:
// 设定栏位名称
QStringList columnTitle;
columnTitle.append("Name");
columnTitle.append("Size");
treeWidget->setHeaderLabels(columnTitle);

这个程式片段会设定两栏的栏位标题,分别为Name与Size名称,QTreeWidget要设定一个顶层的QTreeWidgetItem:
QTreeWidgetItem *dir = new QTreeWidgetItem(fileColumn);
dir->setIcon(0, QIcon("caterpillar_head.jpg"));
dir->setCheckState(0, Qt::Checked); // 设定显示可核取的方块
treeWidget->addTopLevelItem(dir);

setCheckState()方法设定QTreeWidgetItem出现可核取的方块
。QTreeWidget中每个树状子节点则为每个QTreeWidgetItem的子元件,例如:
QStringList fileColumn;
fileColumn.append(fileInfo.fileName());
QTreeWidgetItem *child = new QTreeWidgetItem(fileColumn);
child->setIcon(0, QIcon("caterpillar_head.jpg"));           
parentWidgetItem->addChild(child);

以上为QTreeWidget与QTreeWidgetItem的基本使用方式。下面这个程式将结合之后会介绍的 QFileInfo与QDir 类别,使用递回查询出指定目录下的所有目录与档案,但不包括隐藏档与符号连结,查询的结果将分为目录与档案,并使用QTreeWidget类别的树状结构加以显示,目前您只要先注意
QTreeWidget与QTreeWidgetItem的使用方式,QFileInfo类别与QDir类别之后将会介绍
#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QStringList>
#include <QFile>
#include <QFileInfo>
#include <QDir>

void listFile(QTreeWidgetItem *, QFileInfo &);

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

QTreeWidget *treeWidget = new QTreeWidget;
treeWidget->setWindowTitle("QTreeWidget & Item");
treeWidget->resize(400, 250);

// 设定栏位名称
QStringList columnTitle;
columnTitle.append("Name");
columnTitle.append("Size");
treeWidget->setHeaderLabels(columnTitle);

// 查询的目录
QFileInfo fileInfo("D://Temp");
QStringList fileColumn;
fileColumn.append(fileInfo.fileName());

QTreeWidgetItem *dir = new QTreeWidgetItem(fileColumn);
dir->setIcon(0, QIcon("caterpillar_head.jpg"));
dir->setCheckState(0, Qt::Checked); // 设定可核取的方块
treeWidget->addTopLevelItem(dir);

// 查询目录
listFile(dir, fileInfo);

treeWidget->show();

return app.exec();
}

void listFile(QTreeWidgetItem *parentWidgetItem, QFileInfo &parent) {
QDir dir;
dir.setPath(parent.filePath());
dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoSymLinks);
dir.setSorting(QDir::DirsFirst | QDir::Name);

const QFileInfoList fileList = dir.entryInfoList();

for (int i = 0; i < fileList.size(); i++) {
QFileInfo fileInfo = fileList.at(i);
QStringList fileColumn;
fileColumn.append(fileInfo.fileName());
if (fileInfo.fileName() == "." || fileInfo.fileName() == ".." ); // nothing
else if(fileInfo.isDir()) {
QTreeWidgetItem *child = new QTreeWidgetItem(fileColumn);
child->setIcon(0, QIcon("caterpillar_head.jpg"));
child->setCheckState(0, Qt::Checked);
parentWidgetItem->addChild(child);
// 查询子目录
listFile(child, fileInfo);
}
else {
fileColumn.append(QString::number(fileInfo.size()));
QTreeWidgetItem *child = new QTreeWidgetItem(fileColumn);
child->setIcon(0, QIcon("momor_head.jpg"));
child->setCheckState(0, Qt::Checked);
parentWidgetItem->addChild(child);
}
}
}

程式中直接设定显示D:/Temp下的所有目录与档案,一个执行的结果画面如下所示: