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)

相关推荐

  • 肝脏在左边还是右边,人的肝在左边还是右边`

    技术肝脏在左边还是右边,人的肝在左边还是右边`肝大部分位于右季肋区和腹上区,小部分位于左季肋区。肝的上界与膈穹窿一致,可以用以下3点连线来表示:右锁骨中线上与第五肋间交点;前正中线与剑胸结合的交点;左锁骨中线与第5肋间隙

    生活 2021年11月1日
  • MySQL中CURRENT_TIMESTAMP的使用方式是什么

    技术MySQL中CURRENT_TIMESTAMP的使用方式是什么这篇文章主要讲解了“MySQL中CURRENT_TIMESTAMP的使用方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢

    攻略 2021年11月25日
  • Windows下怎么安装Frida环境

    技术Windows下怎么安装Frida环境今天就跟大家聊聊有关 Windows下怎么安装Frida环境,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 Window

    攻略 2021年10月23日
  • Python中Gevent怎么用

    技术Python中Gevent怎么用这篇文章主要为大家展示了“Python中Gevent怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中Gevent怎么用”

    攻略 2021年10月27日
  • 刷抖音播放量,抖音在线刷播放量网址?

    技术刷抖音播放量,抖音在线刷播放量网址?抖音快车这个引流渠道目前是见效快的办法,目前抖音HOT热门位子很火,流量相比位的三分之一获取得到,所以各大商家纷纷竞争目前HOT位子是根据点击率+ROI进行评估的。做引流先做快车,

    测评 2021年10月26日
  • MySQL 5.5中SHOW PROFILE、SHOW PROFILES语句怎么用

    技术MySQL 5.5中SHOW PROFILE、SHOW PROFILES语句怎么用这篇文章将为大家详细讲解有关MySQL 5.5中SHOW PROFILE、SHOW PROFILES语句怎么用,小编觉得挺实用的,因此

    攻略 2021年10月30日