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)

相关推荐

  • JS如何实现拖拽进度条改变元素透明度

    技术JS如何实现拖拽进度条改变元素透明度JS如何实现拖拽进度条改变元素透明度,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天要分享的是运用原生JS拖拽

    攻略 2021年10月20日
  • 二分查询

    技术二分查询 二分查询二分查询:package com.cc;/** * @Author: cc * @Create: 2021/12/20 * 二分查询实现步骤: * 1.前提:有已排序数组A (假设

    礼包 2021年12月22日
  • nginx配置文件是怎么样的

    技术nginx配置文件是怎么样的这篇文章将为大家详细讲解有关nginx配置文件是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。#运行用户user www-data; #启

    攻略 2021年11月21日
  • 如何增加上一个和下一个按钮实现遍历分析?

    技术如何进行增加prev,next按钮实现问题的遍历分析如何进行增加prev,next按钮实现问题的遍历分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

    攻略 2021年12月18日
  • web边框设置弧形(网页中一竖杠怎么设计渐变)

    技术web中怎么用线性渐变实现斜线这篇文章主要介绍“web中怎么用线性渐变实现斜线”,在日常操作中,相信很多人在web中怎么用线性渐变实现斜线问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

    攻略 2021年12月22日
  • 如何解析element-ui中upload组件传递文件及其他参数的问题

    技术如何解析element-ui中upload组件传递文件及其他参数的问题如何解析element-ui中upload组件传递文件及其他参数的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解

    攻略 2021年11月9日