精华内容
下载资源
问答
  • 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);
            }
        }

    展开全文
  • 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);   //返回获取到的子节点数量,去除"当前节点本身"
    }

     

    展开全文
  • 能否帮个忙 或者提供一个思路, 我之前的想法是 ``` while(*it) { //获取当前节点下所有子节点的指针 } ``` 把指针复制过去 但是好像不行,,能力有限 希望提供一个思路 帮个忙。
  • 遍历QTreeWIDget子节点

    2020-03-10 11:39:13
    //ui 文件中定义 //QTreeWidget *treeWidget; //遍历treeWidget QTreeWidgetItemIterator it(ui.treeWidget); while (*it) { //do something like qDebug() << (*it)->text(0); ++it; } ...
    //ui 文件中定义
    //QTreeWidget *treeWidget;
    
    //遍历treeWidget
    QTreeWidgetItemIterator it(ui.treeWidget);
    while (*it) {
         //do something like
         qDebug() << (*it)->text(0);
         ++it;
    }
    

     

    展开全文
  • 注意:篇幅有限,没有写子节点和父节点联动选中,所以在选择子节点时麻烦自行将父节点选上,不然会跳过。 代码块儿: import sys from PyQt5.QtWidgets import QTreeWidgetItem, QTreeWidget, QWidget, ...

    demo
    好处和坏处
    对比网上的办法


    准备一个小demo

    常见小demo
    简介:商品种类和商品的树形嵌套结构demo
    功能:点击按键获取当前所有被选中的商品(夹带了一点私货〃‘▽’〃)
    注意:篇幅有限,没有写子节点和父节点联动选中,所以在选择子节点时麻烦自行将父节点选上,不然会跳过。

    在这里插入图片描述
    在这里插入图片描述

    代码块儿:
    import sys
    from PyQt5.QtWidgets import QTreeWidgetItem, QTreeWidget, QWidget, QVBoxLayout, QPushButton, QApplication
    from PyQt5.QtCore import Qt
    
    
    class Demo(QWidget):
        def __init__(self):
            super().__init__()
            # 实例化一个树形结构,隐藏了header
            self.tree = QTreeWidget()
            self.tree.setHeaderHidden(True)
            # 顶级分支
            self.tree_main = QTreeWidgetItem(self.tree)
            self.tree_main.setText(0, '商品种类')
            # 设置一些二级分支
            tree_second = ['电子产品', '水果', '日用品', '喜欢的人']
            self.gen_branch(self.tree_main, tree_second)
            # 设置一些三级分支
            tree_fruit = ['苹果', '香蕉', '梨']
            tree_daily_use = ['纸巾', '毛巾']
            tree_lovers = ['迪迪1号', '迪迪2号']
            # child(1) 意思是分支的第1个节点, 序号从0算起
            self.gen_branch(self.tree_main.child(1), tree_fruit)
            self.gen_branch(self.tree_main.child(2), tree_daily_use)
            self.gen_branch(self.tree_main.child(3), tree_lovers)
            # 一个按钮
            self.pushButton = QPushButton('选好了')
            # 显示出来
            self.qvl = QVBoxLayout()
            self.qvl.addWidget(self.tree)
            self.qvl.addWidget(self.pushButton)
            self.setLayout(self.qvl)
    
            # 绑定一下槽函数,传入主要的分支节点
            self.pushButton.clicked.connect(lambda: self.get_checked(self.tree_main))
    
        @staticmethod
        def gen_branch(node: QTreeWidgetItem, texts: list):
            """ 给定某个节点和列表 在该节点生成列表内分支"""
            for text in texts:
                item = QTreeWidgetItem()
                item.setText(0, text)
                item.setCheckState(0, Qt.Unchecked)
                node.addChild(item)
    
        def get_checked(self, node: QTreeWidgetItem)->list:
            """ 得到当前节点选中的所有分支, 返回一个 list """
            temp_list = []
            # 此处看下方注释 1
            for item in node.takeChildren():
                # 判断是否选中
                if item.checkState(0) == Qt.Checked:
                    temp_list.append(item.text(0))
                    # 判断是否还有子分支
                    if item.childCount():
                        temp_list.extend(self.get_checked(item))
                node.addChild(item)
            print(temp_list)
            return temp_list
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        win = Demo()
        win.show()
        sys.exit(app.exec_())
    
    
    注释01:在这个函数中,我传入了一个 node 节点,takeChildren() 这个方法会将该node节点的所有一级子分支拿出来(删除),并返回节点的所有一级分支的列表,如下所示。该方法只能返回一级的节点信息,利用 childCount() 来判断是否有子分支,有则递归,一直到最底部的节点。因为在获取的时候 takeChildren() 删除了所有节点,所以在操作结束后重新加入到 node 节点中
    [
    <PyQt5.QtWidgets.QTreeWidgetItem object at 0x0000000008464708>, 
    <PyQt5.QtWidgets.QTreeWidgetItem object at 0x0000000008464798>, 
    ]
    

    这样的做法有什么好处和坏处?

    最大的好处无疑是不需要创建额外的变量去存储子节点的信息,子节点的信息和顺序都是实时获取的而非前期就定好了的。坏处,我设想这个方法用多了可能会存在节点顺序改变的情况。比如“苹果、香蕉”变成了“香蕉、苹果”,目前未出现。

    对比网上的方法

    有一个关于 QTreeWidgetItemIterator 的办法,这是Qt中自带的遍历器,大概如下

    item = QtWidgets.QTreeWidgetItemIterator(self.treeWidget)
    用 item.value() 来定位到一个节点,item.value() 的实例就是上文列表中的那种对象,个人感觉差不太多。


    还有一种比较暴力做法。在生成子节点的时候将所有子节点放到当前类的作用域中,也就是作为属性存在。
    self.item1 = QTreeWidgetItem()

    或是生成的时候保存在一个定义在作用域的列表中,这么做有一个坏处,节点的信息都是提前定好了的。但实际上遇到的情况更多应该是未知的。
    self.item_list = []
    self.item_list.append([... ... ])
    

    我是庸了个白,你的点赞将是我更新的最大动力。
    展开全文
  • pyqt 遍历QTreeWidget节点 最近在写UI界面相关的东西,遇到了遍历TreeWidget节点的问题,上网搜了很多之后发现,都是Qt语言的,C++语句,使用python来写的文章找了半天没找到,于是就自己写了一个。 def traverse...
  • QTreeWidget搜索功能---遍历QTreeWidget

    千次阅读 2019-08-27 11:39:02
    1、需求:查找QTreeWidget中满足条件的QTreeWidgetItem显示,不满足条件的隐藏 2、接口QTreeWidgetItem::setHidden(bool), true为隐藏,false为显示 void OnFindItem(const QString &qsFilter) { ...
  • 前言:作为一只菜鸟,无法像诸位大神那样在描述问题之前深入浅出地介绍背景TAT,只能默认来看这篇文章的人对QTreeWidget已经有过了解,想在python中实现对其下所有Item遍历。  由于试手的软件里需要实现按下...
  • 树型部件QTreeWidget中的QTreeWidgetItem项,可以通过child(int index) 方法获取项的子项列表中序号为index的项,注意index取值从0开始。子项的个数可以通过childCount()方法获取,index的值必须小于子项的个数,...
  • connect(ui->treeWidget_2,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this,SLOT(checkself(QTreeWidgetItem* ,int))); 其次,checkself实现获取当前item位置,并调用获取根item名称的函数。getsername()。 ...
  • PyQt5遍历QTreeWidget

    千次阅读 2019-11-13 16:54:17
    # 非根节点,添加子节点 root . addChild ( child ) self . rootList . append ( child ) value = data [ key ] self . generateTreeWidget ( value , child ) else : root . setText ( 1 , str ...
  • Qt之QTreeWidget添加节点获取节点

    千次阅读 2020-02-29 20:35:29
    Qt之QTreeWidget添加节点获取节点概述:代码示例:.h.cpp效果图:over:文末一句话: 概述: QTreeWidget 类根据预设的模型提供树形显示控件。 QTreeWidget 使用类似于 QListWidget 类的方式提供一种典型的基于 item...
  • 实现树的遍历并且反应树的节点的基本信息,反应树的节点基本的数量,可用于一般树的遍历
  • 用到的信号是void itemChanged(QTreeWidgetItem* item, int column); 我们在使用Qt的树控件QTreeWidget的时候,经常会遇到需要检查当前节点的选中状态; 一般一个节点有三个状态: A:当前节点以及所有子节点都被选中...
  • void DevMainWindow::indexCurTreeItem(QModelIndex index) ... QTableWidgetItem *tableItem = ui->tableWidget->item(index.row(), 5); qDebug() "item.text:::" tableItem->text(); itemText1
  • Qt中文手册 之 QTreeWidgetItem

    千次阅读 2018-10-28 11:26:56
    QTreeWidgetItem> 成员函数 1、QTreeWidgetItem::QTreeWidgetItem(inttype= Type) 使用类型type构造项,默认类型窗口类型 2、QTreeWidgetItem::QTreeWidgetItem(constQStringList&strings,inttype...
  • 造轮子--QTreeWidget节点之精确搜索

    万次阅读 多人点赞 2016-10-24 00:13:22
    由于项目需要对QTreeWidget节点进行搜索,所以就做了一个精确搜索树节点文本的轮子。 搜索基本说明(搜索说明引用自这里):  一般搜索方式有两种:精确搜索和模糊搜索。下面我分两部分说明,假设树中节点文字有...
  • QTreeWidget的子项在插入后,想要通过子项中的 text 内容找到对应的子项,暂时没有发现官方提供的函数中可直接使用的方法(若有欢迎评论中告诉我)。 在此使用迭代器进行遍历 QTreeWidgetItemIterator ,查找对应的...
  • QTreeWidgetItem *cities = new QTreeWidgetItem(treeWidget); cities->setText(0, tr("Cities")); QTreeWidgetItem *osloItem = new QTreeWidgetItem(cities); osloItem->setText(0, tr
  • //文件中tree1和treeList分别在头文件...QTreeWidgetItem*> tree1; QStringList treeList; #include “mainwindow.h” #include “ui_mainwindow.h” #include #include #include #include #include #include<...
  • 在使用QTreeWidget显示文件树时,需要...QTreeWidget在添加节点时,其节点前面的复选框默认时不显示的,而要显示复选框,我们则需要通过QTreeWidgetItem的方法来设置。 void QTreeWidgetItem::setCheckState(int column
  • 我有一个treewidget,然后上面有很多的节点,选中节点后,再点击一个按钮就会弹出对话框输入一些我想填的内容,现在的问题是我点击其他的节点没有问题,但是当点击根节点的时候程序就崩溃了,请问如何做才可以
  • QT之QTreeWidget的使用

    千次阅读 2021-02-27 11:33:26
    QTreeWidget使用 QTreeWidget的基本使用 创建基础QTreeWidget ui->treeWidget->setColumnCount(3); ui->treeWidget->setHeaderLabels(QStringList()<<"编号"<<"启用"<<"描述");...
  • QTreeWidget过滤子item

    2021-03-30 22:27:45
    目前了解到的有两种方法: 1:通过findItems 过滤出符合条件...QTreeWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const; QList<QTreeWidgetItem*> MatchItem =

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 171
精华内容 68
关键字:

qtreewidgetitem遍历子节点