Qt QTreeWidget树形结构怎么实现

技术Qt QTreeWidget树形结构怎么实现本篇内容介绍了“Qt QTreeWidget树形结构怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧

本文介绍了“如何实现QTreeWidget的树形结构”的知识。很多人在实际案件操作中都会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

Qt可以使用QTreeWidget类或QTreeView类实现树形结构,QTreeWidget继承了QTreeView类。树形效果如下图所示:

QtQTreeWidget树形结构怎么实现

这是怎么发生的?点击节点时会有相应的事件响应。

00-1010Qt Gui有一个treeWidget组件。在图形用户界面中布局控件,假设它的对象名是treeWidget。

QTreeWidget官方文档:http://qt-project.org/doc/qt-4.8/qtreewidget.html

树形结构由QTreeWidget类和QTreeWidgetItem类实现,QTreeWidgetItem类增加节点。上面的代码实现如下:

ui-TreeWidget-SetColumnCount(1);//设置列数

ui-tree widget-setheader label(tr('图像选择'));//设置标题的标题

qtreewidgetitem * imageitem 1=new qtreewidgetitem(UI-tree widget,qstring list(qstring(' image1 '))));

imageItem1-setIcon(0,QICon(' XXX . png '));

QTreeWidgetItem * imageitem 1 _ 1=new QTreeWidgetItem(imageitem 1,QStringList(QString(' band 1 ')));//子节点1

image item 1-addChild(image item 1 _ 1);//添加子节点

qtreewidgetitem * image item 2=new qtreewidgetitem(UI-tree widget,qstring list(' image 2 '));

QTreeWidgetItem * imageitem 2 _ 1=new QTreeWidgetItem(imageitem 2,QStringList(QString(' band 1 ')));//子节点1

QTreeWidgetItem * imageitem 2 _ 2=new QTreeWidgetItem(imageitem 2,QStringList(QString(' band 2 ')));//子节点2

image item 2-addChild(image item 2 _ 1);//添加子节点

image item 2-addChild(image item 2 _ 2);

ui-TreeWidget-expandAll();//所有节点都已展开。当然,还有其他方法来设置它们。当你需要的时候,查看帮助文档来学习。

除了上述方法之外,还可以使用QListQTreeWidgetItem *项来添加节点。QT在C语言中封装了STL库中容器的使用,使用封装的类可以轻松解决很多相似且复杂的数据结构。实施如下:

//只写节点的实现

QListQTreeWidgetItem * rootList

QTreeWidgetItem * imageitem 1=new QTreeWidgetItem;//添加第一个父节点

Image1-settext (0,tr(' image1 '));

rootlist . append(imageitem 1);

QTreeWidgetItem * imageitem 1 _ 1=new QTreeWidgetItem(imageitem 1,QStringList(QString(' band 1 ')));//添加子节点

image item 1-addChild(image item 1 _ 1);

QTreeWidgetItem*ima

geItem2 = new QTreeWidgetItem;   //添加第二个父节点
imageItem2->setText(0,tr("图像2"));
rootList.append(imageItem2);
QTreeWidgetItem *imageItem2_1 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band1")));  //添加子节点
QTreeWidgetItem *imageItem2_2 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band2")));
imageItem2->addChild(imageItem2_1);
imageItem2->addChild(imageItem2_2);
ui->treeWidget->insertTopLevelItems(0,rootList);  //将结点插入部件中
ui->treeWidget->expandAll(); //全部展开

2. 点击节点的事件响应

首先想到有没有点击某个节点的信号,查看文档,有一个void itemClicked ( QTreeWidgetItem * item, int column )信号,是双击某个节点的信号,将该信号与某个自定义槽相连,当双击节点时触发槽函数。

看一下这个信号,第一个参数为点击的QTreeWidgetItem类对象,第二个参数为节点所在列号。

思路:根据点击的QTreeWidgetItem类对象可以通过parent()函数得到父节点,如果QTreeWidgetItem类对象就是最最顶端的节点时,parent()函数返回的就是NULL。通过insertChildren ( int index, const QList<QTreeWidgetItem *> & children )函数可以得到该节点在父节点中的索引值。

目前只能解决只有一个最顶端父节点时的事件响应,当最顶端的父节点有多个(比如本文开头有2个),这时点击子节点时,无法判断子节点的父节点是哪一个(本人愚笨啊!),因此没法为其槽函数执行相应的操作。

这里就以一个分支为例。

private slots:
      void showSelectedImage(QTreeWidgetItem * item, int column); //点击树节点事件
  
  connect(ui->treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(showSelectedImage(QTreeWidgetItem*,int)));
  
  void MainWindow::showSelectedImage(QTreeWidgetItem *item, int column)
  {
      QTreeWidgetItem *parent = item->parent();
      if(NULL==parent) //注意:最顶端项是没有父节点的,双击这些项时注意(陷阱)
         return;
     int col = parent->indexOfChild(item); //item在父项中的节点行号(从0开始)
 
     if(0==col) //Band1
     {
         //执行对应操作
     }
     if(1==col) //Band2
     {
         //执行对应操作
     }
 }

如果不加父节点是否为空的判断,当节点有父节点时,不会出错,当节点没有父节点时,程序会出错(运行错误),判断之后,双击没有父节点的节点就会是树的收缩操作。

“Qt QTreeWidget树形结构怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/126261.html

(0)

相关推荐

  • 火车怎么读,以|A开头的火车, 应该怎样读?

    技术火车怎么读,以|A开头的火车, 应该怎样读?Z-直达特快列车T-特快列车K-快速列车N-管内快速列车(和K一个意思火车怎么读,咱们普通乘客不用特意区别)L、A-临时旅客列车Y-旅游列车没有字母的四位车次普通列车详细如

    生活 2021年10月29日
  • Java 基础( 数组)

    技术Java 基础( 数组) Java 基础( 数组)数组数组(Array), 是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。数组的常见概念1.数组

    礼包 2021年11月29日
  • 我为妈妈做件事作文,帮妈妈擦地作文50个字

    技术我为妈妈做件事作文,帮妈妈擦地作文50个字范文我为妈妈做件事作文:5月9日是母亲节,老师布置了“帮妈妈做一件事”的作业。我不知道该帮妈妈做什么事,就去问爸爸,爸爸说:“可以帮妈妈洗洗碗,或者帮妈妈捶捶背。”我又去问妈

    生活 2021年10月23日
  • 怎么使用awk语言编写脚本

    技术怎么使用awk语言编写脚本这篇文章将为大家详细讲解有关怎么使用awk语言编写脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。和写 shell 脚本差不多,awk 脚本以下面这一行

    攻略 2021年10月26日
  • 0元刷抖音粉,刷抖音粉丝的好处有哪些?

    技术0元刷抖音粉,刷抖音粉丝的好处有哪些?抖音粉丝数量少怎么办?如何刷抖音粉丝呢?很多玩抖音的小伙伴都有刷粉丝的需求,那么今天小编就来教大家如何快速刷抖音粉丝吧,其实也不难,只要用心学肯定能学会。
    迫不及待想涨粉的现在可

    测评 2021年10月19日
  • 多分类任务中不同隐藏层层数对实验结果的影响

    技术多分类任务中不同隐藏层层数对实验结果的影响 多分类任务中不同隐藏层层数对实验结果的影响1 导入实验所需要的包 import torch
    import torch.nn as nn
    import nu

    礼包 2021年11月5日