Qt之QTreeWidget添加节点获取节点

概述:

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:

欢迎大家关注作者在文末评论、点赞、转发以及批评指正!
如果大家有更好的方法或有问题可以在文末评论一起讨论!
共同学习!
共同进步!

文末一句话:

人,切莫自以为是,地球离开了谁都会转,古往今来,恃才放肆的人都没有好下场。
所以,即便再能干,也一定要保持谦虚谨慎,做好自己的事情,是金子总会发光。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值