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)

相关推荐

  • 抖音刷粉会被限流吗,抖音刷粉有什么影响?

    技术抖音刷粉会被限流吗,抖音刷粉有什么影响?抖音的爆火引发了新的产业链的产生,点开百度输入关键词抖音上热门涨粉等等,就会出现很多的机构打着上热门,涨粉的这种幌子,制定出各种诱人的套餐,对抖音进行刷量,刷赞,换句话说只要你

    测评 2021年11月10日
  • Oracle数据库产重启服务和监听程序怎么实现

    技术Oracle数据库产重启服务和监听程序怎么实现这篇文章主要介绍“Oracle数据库产重启服务和监听程序怎么实现”,在日常操作中,相信很多人在Oracle数据库产重启服务和监听程序怎么实现问题上存在疑惑,小编查阅了各式

    攻略 2021年12月11日
  • oracle中expdp和impdp如何导出导入表空间

    技术oracle中expdp和impdp如何导出导入表空间小编给大家分享一下oracle中expdp和impdp如何导出导入表空间,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有

    攻略 2021年11月11日
  • openldap中数据库配置的示例分析

    技术openldap中数据库配置的示例分析这篇文章主要介绍openldap中数据库配置的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完![root@ldap-server ldap]# cp

    攻略 2021年11月18日
  • 如何理解ARM处理异常

    技术如何理解ARM处理异常本篇内容主要讲解“如何理解ARM处理异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解ARM处理异常”吧! 一、异常(Exception)异

    攻略 2021年10月21日
  • http和https的区别有哪些

    技术http和https的区别有哪些这篇文章将为大家详细讲解有关http和https的区别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.了解http和https

    攻略 2021年11月12日