概述:
QTreeWidget 类根据预设的模型提供树形显示控件。
QTreeWidget 使用类似于 QListWidget 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类。
如果不需要灵活的“模型/视图”框架,可以使用QTreeWidget 来创建有层级关系的树形结构。当把标准 item 模型结合 QTreeView 使用时,可以得到更灵活的使用方法,从而把“数据”和“显示”分离开。
代码示例:
.h
#ifndef MYTREEWIDGET_H
#define MYTREEWIDGET_H
#include <QWidget>
#include <QDir>
#include <QDebug>
#include <QTreeWidgetItem>
namespace Ui {
class MyTreeWidget;
}
class MyTreeWidget : public QWidget
{
Q_OBJECT
public:
explicit MyTreeWidget(QWidget *parent = 0);
~MyTreeWidget();
private:
/**
* @brief initTree1 初始化树
*/
void initTree1();
void initTree2();
/**
* @brief GetNode 获取节点
*/
void GetNode();
private:
Ui::MyTreeWidget *ui;
QTreeWidgetItem *item; //根节点(根节点下可以有多个子结点)
QTreeWidgetItem *itemD; //子节点(子点下可以有多个孙子结点)
QTreeWidgetItem *itemW; //子节点
};
#endif // MYTREEWIDGET_H
.cpp
#include "MyTreeWidget.h"
#include "ui_MyTreeWidget.h"
MyTreeWidget::MyTreeWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyTreeWidget)
{
ui->setupUi(this);
item = new QTreeWidgetItem;
item->setText(0,"Qt.Fantast");
ui->treeWidget->addTopLevelItem(item);//添加根节点
initTree1();
initTree2();
GetNode();
}
MyTreeWidget::~MyTreeWidget()
{
delete ui;
}
void MyTreeWidget::initTree1()
{
itemW = new QTreeWidgetItem;
itemW->setText(0,"Qt");
item->addChild(itemW);//插入在根节点下面
QString path = QString("D:/QtApp/C++DesignPayyerns/Plant");
QDir dir(path);
QStringList list;
list << "*.cpp" << "*.h";
QStringList files = dir.entryList(list);
for(int i=0;i<files.size();i++)
{
QTreeWidgetItem *itemWW = new QTreeWidgetItem;
QString name = files.at(i);
itemWW->setText(0,name);
itemW->addChild(itemWW);//插入在根节点下面
}
}
void MyTreeWidget::initTree2()
{
itemD = new QTreeWidgetItem;
itemD->setText(0,"Ui");
item->addChild(itemD);//插入在根节点下面
QString path = QString("D:/QtApp/C++DesignPayyerns/Command");
QDir dir(path);
QStringList list;
list << "*.cpp" << "*.h";
QStringList files = dir.entryList(list);
for(int i=0;i<files.size();i++)
{
QTreeWidgetItem *itemDD = new QTreeWidgetItem;
QString name = files.at(i);
itemDD->setText(0,name);
itemD->addChild(itemDD);//插入在根节点下面
}
}
void MyTreeWidget::GetNode()
{
int num = ui->treeWidget->topLevelItemCount(); //返回根节点数量
qDebug() << num;
int clolum = ui->treeWidget->columnCount(); //返回列数
qDebug() << clolum;
for(int i=0;i< num;i++)//遍历获取根节点文字
{
QTreeWidgetItem *item = ui->treeWidget->topLevelItem(i);//获取最高节点
qDebug()<< item->text(0);
}
for(int i=0;i < item->childCount();i++)
{
QTreeWidgetItem *child = item->child(i);//获取子节点
QString text =child->text(0);
qDebug() << text;// 我 敌 此方法相同于下面两个循环
}
for(int i = 0;i < itemW->childCount();i++)
{
QTreeWidgetItem *child = itemW->child(i);//获取子节点
QString text =child->text(0);
qDebug() << text;
}
for(int i = 0;i < itemD->childCount();i++)
{
QTreeWidgetItem *child = itemD->child(i);//获取子节点
QString text =child->text(0);
qDebug() << text;
}
}
// QString currDir = QString("%1/LogFile/").arg(QDir::currentPath());
// QDir Dir(currDir); //查看工作路径是否存在
// if(!Dir.exists()){ Dir.mkdir(currDir);} //如果文件夹不存在则新创建文件夹
// Dir.setFilter(QDir::Files); //设置过滤器只查看文件
// QStringList list = Dir.entryList(QDir::Files); //获取所有文件
// foreach (QFileInfo file, list) //遍历只加载.txt到文件列表
// {
// if(file.fileName().split(".").back() == "txt")
// {
// ui->logName->addItem(file.fileName()/*.split(".").at(0)*/);
// }
效果图:
over:
欢迎大家关注作者在文末评论、点赞、转发以及批评指正!
如果大家有更好的方法或有问题可以在文末评论一起讨论!
共同学习!
共同进步!
文末一句话:
人,切莫自以为是,地球离开了谁都会转,古往今来,恃才放肆的人都没有好下场。
所以,即便再能干,也一定要保持谦虚谨慎,做好自己的事情,是金子总会发光。