精华内容
下载资源
问答
  • int size = mTreeWidget->topLevelItemCount(); QTreeWidgetItem *child; for (int i = 0; i < size; i++) { child = mTreeWidget->topLevelItem(i); int childCount = child-...

    int size = mTreeWidget->topLevelItemCount();
        QTreeWidgetItem *child;
        for (int i = 0; i < size; i++)
        {
            child = mTreeWidget->topLevelItem(i);
            int childCount = child->childCount();
            for (int j = 0; j < childCount; ++j)
            {
                QTreeWidgetItem * grandson = child->child(j);
            }
        }

    展开全文
  • 能否帮个忙 或者提供一个思路, 我之前的想法是 ``` while(*it) { //获取当前节点下所有子节点的指针 } ``` 把指针复制过去 但是好像不行,,能力有限 希望提供一个思路 帮个忙。
  • QTreeWidgetItem itemAt( QPoint p) QTreeWidgetItem itemAt(int x, int y) 通过该方法可以获取到视口上对应坐标所在的项,如果对应坐标位置无项则返回None。 示例: 以下代码输出树型部件视口范围内的所有项首列...
  • 1. QTreeWidget删除整个TreeWidget 使用递归方式来删除节点下的子节点。分析:如果当前节点没有子节点那么就直接删除,如果有子节点就进入子节点继续删除...void MainWindow::removeItem(QTreeWidgetItem *item) {

    1. QTreeWidget删除整个TreeWidget

    使用递归方式来删除节点下的子节点。分析:如果当前节点没有子节点那么就直接删除,如果有子节点就进入子节点继续删除(这里采用递归形式)直到最低层的节点(没有子节点)返回。然后逐一一层一层的返回实现递归删除。

    说明:这里利用了第一个节点删除后下一个节点自动的会成为第一个节点特性。循环删除第一个节点从而实现删除所有节点的目的。

    //递归删除节点
    void MainWindow::removeItem(QTreeWidgetItem *item)
    {
        int count = item->childCount();
        if(count == 0)//没有子节点,直接删除
        {
            delete item;
            return;
        }
    
        for(int i=0; i<count; i++)
        {
            QTreeWidgetItem *childItem = item->child(0);//删除子节点
            removeItem(childItem);
        }
        delete item;//最后将自己删除
    
    }
    
    /**
     * @brief MainWindow::removeAll_treeWidgetItemv
     * 功能:删除QTreeWidget中所有节点
     */
    void MainWindow::removeAll_treeWidgetItemv(void)
    {
        //通过删除根节点及其子节点来达到删除整个TreeWidget的目的
        QTreeWidgetItem *item;
        item = ui->josn_treeWidget->topLevelItem(0);
        while(item)
        {
             removeItem(item);
             item = ui->josn_treeWidget->topLevelItem(0);
        }
    }

    2. QTreeWidget遍历当前节点的所有子节点

    说明:这里使用了QTreeWidget迭代器遍历整个TreeWidget控件,然后再判断具有相同父节点的节点。如果节点的父节点(一直往上找,可能是父节点的父节点)相同表示是同一个父节点下的子节点(不一定是同一级的节点)。

    /**
      * 功能:查找当前节点下所有子节点
      * 返回值:返回
      **/
    int myjosn_string::FindALL_childrenNode(QTreeWidgetItem *item)
    {
        if(item->childCount() == 0) //说明:当Item下没有子节点时会导致程序崩溃
        {
            return 0;
        }
        //使用QTreeWidgetItem迭代器从当前节点遍历整个QTreeWidget树
        //判断条件:判断每个QTreeWidgetItem的parent是不是当前节点,如果是表示当前遍历的节点为此节点的子节点
        //否则就不是则停止遍历。此处已经是当前节点的最后一个子节点了
        QTreeWidgetItemIterator ite_item(item); //迭代器的参数应该为全局变量才行
        int all_children_count = 0;
        //节点没有父节点时,返回NULL
        QTreeWidgetItem *temp_item;
        ite_item++;
        temp_item = (*ite_item)->parent();
    
        qDebug() << "当前节点" << item->childCount();
    
        if(item->childCount() != 0)
        {
            while((*ite_item))
            {
                while(temp_item)	//筛选具有相同父节点的节点
                {
                    if(temp_item != item)
                    {
                        return (all_children_count);  //找到了当前节点的结束位置
                    }
                    else
                    {
                        break;  //属于当前节点的子节点
                    }
                    temp_item = temp_item->parent();
                }
                all_children_count++;
                ite_item++;
            }
        }
        qDebug() << "所有的子节点:" << all_children_count - 1;
        return (all_children_count - 1);   //返回获取到的子节点数量,去除"当前节点本身"
    }

     

    展开全文
  • Qt之QTreeWidget添加节点获取节点

    千次阅读 2020-02-29 20:35:29
    Qt之QTreeWidget添加节点获取节点概述:代码示例:.h.cpp效果图:over:文末一句话: 概述: QTreeWidget 类根据预设的模型提供树形显示控件。 QTreeWidget 使用类似于 QListWidget 类的方式提供一种典型的基于 item...

    概述:

    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:

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

    文末一句话:

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

    展开全文
  • QTreeWidgetItem类型的项构建以后,可以通过addChild(QTreeWidgetItem child)方法在该项中的子节点最后加入另一个项child作为该项的子项,也可以通过addChildren(iter[QTreeWidgetItem] children)将一个迭代类型...
  • connect(ui->treeWidget_2,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this,SLOT(checkself(QTreeWidgetItem* ,int))); 其次,checkself实现获取当前item位置,并调用获取根item名称的函数。getsername()。 ...

    构建好QTreewidget后,往往需要点击其中某一个子item获取相应的父item或者根item。因获取根item中包含获取父item,所以在此仅演示如何获取根item。

    首先,创建一个槽和信号的连接。itemClicked用于点击某一项时,自动运行相应的checkself。checkself为自己创建的函数。

    connect(ui->treeWidget_2,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this,SLOT(checkself(QTreeWidgetItem* ,int)));


    其次,checkself实现获取当前item位置,并调用获取根item名称的函数。getsername()。

    void MainWindow::checkself(QTreeWidgetItem *item ,int count)
    {
        //测试getname
        char sername[255];
        memset(sername, 0, 255);
    
        getsername(sername,item);
    
    
    }
    

    最后,调用getsername()获取根item名称。

    void MainWindow::getsername(char *sername,QTreeWidgetItem *hItem)
    {
    
            if(!hItem)
                    return;
            QTreeWidgetItem * phItem = hItem->parent();    //获取当前item的父item
            if(!phItem)
            {	// 说明是根节点
                    memset(sername, 0, MAX_IDENT_LEN);    //MAX_INENT_LEN为自己定义,大小为255
                    QString  qstr = hItem->text(0);
                    QByteArray ba = qstr.toLatin1();  //实现QString和 char *的转换
                    const char *cstr = ba.data();
                    strcpy(sername, cstr);
            }
            while (phItem)
            {
                    memset(sername, 0, MAX_IDENT_LEN);
                    QString  qstr = phItem->text(0);
                    QByteArray ba = qstr.toLatin1();    //实现QString和char *的转换
                    const char *cstr = ba.data();
                    strcpy(sername, cstr);             
                    phItem = phItem->parent();
            }
    }


    展开全文
  • 树型部件QTreeWidget中的QTreeWidgetItem项,可以通过child(int index) 方法获取项的子项列表中序号为index的项,注意index取值从0开始。子项的个数可以通过childCount()方法获取,index的值必须小于子项的个数,...
  • 主要代码 # 删除控件树子节点/根节点 def deleteItem(self): ... # 尝试删除子节点(通过其父节点,调用removeChild函数进行删除) currNode = self.tree.currentItem() parent1 = currNode.parent(...
  • QTreeWidget添加了多个子节点,只能显示其中一个子节点,我不知道是不是插入部分有问题 ``` QTreeWidgetItem *Top1Item = new QTreeWidgetItem(); QTreeWidgetItem *Top2Item = new QTreeWidgetItem; ...
  • Qtreewidget点击子item获得绝对路径

    千次阅读 2014-03-28 14:44:12
    在对QTreewidget编写过程中...首先,需要建立一个connect(ui->treeWidget_2,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this,SLOT(checkself(QTreeWidgetItem* ,int)));当点击到该item时,自动执行SLOT内函数,获取
  • 老猿Python博文目录 专栏:使用PyQt开发图形界面Python...可通过indexOfChild(QTreeWidgetItem child)方法返回项下子项child的位置索引,索引值从0计数,如果child对应项未在当前项的子项中,则返回-1 removeChi...
  • Qt QTreeWidget获取row

    2020-12-03 15:20:53
    前言 今天在使用QTreeWidget时想获取QTreeWidget的行,但是我找了半天只查看到可以通过...int QTreeWidget::indexOfTopLevelItem(QTreeWidgetItem *item) const Returns the index of the given top-level item, or
  • Qt功能点之两个QTreeWidget相互拖动节点Qt功能点之两个QTreeWidget相互拖动节点Qt功能点之两个QTreeWidget相互拖动节点Qt功能点之两个QTreeWidget相互拖动节点Qt功能点之两个QTreeWidget相互拖动节点Qt功能点之两个...
  • //遍历 QTreeWidgetItem,根据文本确认选中的树状图节点,并显示在下拉框中 QTreeWidgetItemIterator iterator(unitTree); while (*iterator) { if ((*iterator)->text(0) == 待比较文本) { //找到目标 item...
  • QTreeWidget item 复选状态

    千次阅读 2019-12-26 14:23:42
    1、父节点勾选,则子节点全勾选; 2、父节点取消,则子节点全部取消勾选; 3、子节点部分勾选,则父节点显示部分勾选状态; 4、子节点全部勾选,则父节点显示勾选状态; 下面的实例是现实了两级树结构的节点...
  • 带有CheckBox的树形控件,在点选CheckBox的时候,需要与父节点和子节点进行联动选择。网上有很多通过重写控件的形式来实现,通过自己的实践,发现有两种更简单的方式可以实现: 一、静态法 在静态创建控件的时候,在...
  • Qt获取treewidget所有节点

    千次阅读 2019-08-13 10:09:54
    string,QTreeWidgetItem*>treeNodeName; string nodeNameStr; QTreeWidgetItemIterator ite(ui.substationTreeWidget); while(*ite) { nodeNameStr = (*ite)->text(0).toStdString(); treeNodeNam...
  • 【Qt】QTreeWidgetItem的复选框选中信号

    千次阅读 2019-10-22 09:07:19
    if (item->checkState(0) == Qt::Checked) { //语句 }
  • PyQt:QTreeWidget中QTreeWidgetItem双击展开 QTreeWidget中的子项可以通过点击左侧三角和双击展开,但是需要双击实现其他功能又想保留双击展开时,就需要重写展开的方式。 直接上代码: self.treeWidget....
  • pyqt 遍历QTreeWidget节点 最近在写UI界面相关的东西,遇到了遍历TreeWidget节点的问题,上网搜了很多之后发现,都是Qt语言的,C++语句,使用python来写的文章找了半天没找到,于是就自己写了一个。 def traverse...
  • Qt之QTreeWidget增删节点

    2021-09-29 14:42:24
    Qt之QTreeWidget增删节点概述:.h:.cpp:over:文末一句话: 概述: 1.之前分享过关于QTreeWidget节点操作:链接: QTreeWidget节点操作. 2.这篇文章分享下咱们技术使用的基本操作(添加节点、删除指定节点、删除所有...
  • QTreeWidget详细使用介绍

    千次阅读 2020-09-22 11:02:04
    QTreeWidget继承自QTreeView,是通过树形结构来展示数据结构的控件。 1.QTreeWidget和QTreeView的区别 QTreeView一般和相应的QXXModel合用,形成Model/View结构. QTreeView是一个视图类,你需要手动给其指定模型...
  • QTreeWidget讲解及节点操作

    万次阅读 2013-08-21 22:23:05
    关于Qt的节点操作,也就是QTreeWidget 类的操作。 先看我的效果图!       ...connect(ui->treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),  this,SLOT(showSelecteddataba
  • Qt中QTreeWidget实现节点重命名功能

    千次阅读 2019-03-26 11:17:08
    在Qt开发过程中,多次遇到要对QTreeWidget中的节点重命名,网上有很多可参考的代码,但在拿过来用后发现还是有很多问题。目前本人认为比较靠谱的参考链接如下: https://www.cnblogs.com/ling123/p/5503465.html ...
  • QTreeWidget *treeWidget = new QTreeWidget(this); treeWidget->...QTreeWidgetItem *redGroup = new QTreeWIdgetItem; redGroup->setText(0,QStringLiteral("红队")); treeWidget->addTopL...
  •   from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout, QTreeWidget, QTreeWidgetItem, QGroupBox) from PyQt5.QtGui im...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 311
精华内容 124
关键字:

qtreewidgetitem获取子节点