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)

相关推荐

  • 介绍重庆的英语作文,重庆,我的家乡,英语作文

    技术介绍重庆的英语作文,重庆,我的家乡,英语作文Great changes have taken place in my hometown. But many years ago,the houses in my hom

    生活 2021年10月27日
  • 怎么让awk使用 Shell 变量

    技术怎么让awk使用 Shell 变量这篇文章给大家分享的是有关怎么让awk使用 Shell 变量的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。有两种可能的方法可以让 awk 使用 shell

    攻略 2021年10月26日
  • python光学仿真面向对象光学元件类的实现是什么

    技术python光学仿真面向对象光学元件类的实现是什么python光学仿真面向对象光学元件类的实现是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能

    攻略 2021年10月20日
  • JAVA GC日志的相关知识有哪些

    技术JAVA GC日志的相关知识有哪些本篇内容主要讲解“JAVA GC日志的相关知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA GC日志的相关知识有哪些”吧

    攻略 2021年11月19日
  • 抖音刷赞会上热门吗,刷赞平台自助下单

    技术抖音刷赞会上热门吗,刷赞平台自助下单抖音刷赞会上热门吗,刷赞平台自助下单
    发布视频之后,如果想要获得播放量,虽然说是刷赞是很爽,但是也要担心被封号的问题,那么如果被封号了要怎么解决呢?
    抖音代刷平台可以上热门吗

    测评 2021年11月13日
  • Oracle中exp和imp数据迁移注意事项有哪些

    技术Oracle中exp和imp数据迁移注意事项有哪些这篇文章给大家分享的是有关Oracle中exp和imp数据迁移注意事项有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一,exp时,o

    攻略 2021年11月13日