Qt中树形控件Tree Widget的使用方法有哪些

技术Qt中树形控件Tree Widget的使用方法有哪些本篇内容主要讲解“Qt中树形控件Tree Widget的使用方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Q

本篇内容主要讲解“Qt中树形控件TreeWidget的使用方法有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Qt中树形控件TreeWidget的使用方法有哪些"吧!

树形小部件在项目控件组(项目部件)里面可以找到。这种控件其实有时还是很有用处的,我主要利用的是带有复选框的树形控件。结果如图所示;

Qt中树形控件TreeWidget的使用方法有哪些

当选中顶层的树形节点时,子节点全部被选中;当取消选择顶层树形节点时,子节点的选中状态将全部被取消,二当选中子节点是,父节点显示部分选中的状态。

几个主要的函数:

setCheckState设置复选框;

ItemIsUserCheckable项目上是否有复选框

ItemIsEnabled项目上是否没有被禁用(已启用可用/禁用禁用)

ItemIsSelectable项目是否可以选中

代码:

在主窗口。h中插入一下代码:

void init();

voidupdateParentItem(QTreeWidgetItem * item);

公共槽3360

voitreeitemchanged(QTreeWidgetItem * item,int列);在主窗口构造函数中添加:

init();

connect(ui-treeWidget,SIGNAL(项目已更改(QTreeWidgetItem *,int))、this,SLOT(树项目已更改(QTreeWidgetItem *,int)));初始化函数的实现;

QTreeWidgetItem *组1=新的QTreeWidgetItem(ui-tree小部件);

group1-setText(0,“group 1”);

组1-设置标志(Qt : itemissercheckable | Qt : itemisenabled | Qt :3360 itemisselectable);

组1-设置检查状态(0,Qt:Unchecked未选中未选中);

QTreeWidgetItem *主题11=新的QTreeWidgetItem(第1组);

子项目11-设置标志(Qt : itemiscercheckable | Qt :3360 itemisenabled | Qt :3360 itemisselectable);

子项11-设置文本(0,'子项11 ');

子项11-设置检查状态(0,Qt:Unchecked未选中未选中);

QTreeWidgetItem *主题12=新的QTreeWidgetItem(第1组);

子项目12-设置标志(Qt : itemiscercheckable | Qt :3360 itemisenabled | Qt :3360 itemisselectable);

子项12-设置文本(0,'子项12 ');

子项12-设置检查状态(0,Qt:Unchecked未选中未选中);

QTreeWidgetItem *主题13=新的QTreeWidgetItem(第1组);

   subItem13->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem13->setText(0,"subItem11");
     subItem13->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem14=new QTreeWidgetItem(group1);
     subItem14->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem14->setText(0,"subItem12");
     subItem14->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* group2=new QTreeWidgetItem(ui->treeWidget);
     group2->setText(0,"group2");
     group2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     group2->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem1=new QTreeWidgetItem(group2);
     subItem1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem1->setText(0,"subItem11");
     subItem1->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem2=new QTreeWidgetItem(group2);
     subItem2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem2->setText(0,"subItem12");
     subItem2->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem3=new QTreeWidgetItem(group2);
     subItem3->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem3->setText(0,"subItem11");
     subItem3->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem4=new QTreeWidgetItem(group2);
     subItem4->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem4->setText(0,"subItem12");
     subItem4->setCheckState(0,Qt::Unchecked);
      QTreeWidgetItem* group3=new QTreeWidgetItem(ui->treeWidget);
      group3->setText(0,"group3");
      group3->setFlags(Qt::ItemIsAutoTristate|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
      group3->setCheckState(0,Qt::Unchecked);
 
      QTreeWidgetItem* subItem111=new QTreeWidgetItem(group3);
      subItem111->setFlags(Qt::ItemIsAutoTristate|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
      subItem111->setText(0,"subItem111");
      subItem111->setCheckState(0,Qt::Unchecked);
 
      QTreeWidgetItem* subItem112=new QTreeWidgetItem(group3);
      subItem112->setFlags(Qt::ItemIsAutoTristate|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
      subItem112->setText(0,"subItem112");
      subItem112->setCheckState(0,Qt::Unchecked);

treeItemChanged函数的实现;

 QString itemText=item->text(0);
     //选中
     if(Qt::Checked ==item->checkState(0))//全选check打勾
     {
         QTreeWidgetItem* parent=item->parent();//定义一个节点
         int count=item->childCount();//子节点的数目
         if(count>0)
         {
             for(int i=0;i<count;i++)
             {
                 //子节点也选中
                 item->child(i)->setCheckState(0,Qt::Checked);
             }
         }
         else
         {
             //是子节点
             updateParentItem(item);
         }
     }
     else  if(Qt::Unchecked==item->checkState(0))//存在未选中
     {
         int count=item->childCount();
         if(count>0)
         {
             for(int i=0;i<count;i++)
             {
                 item->child(i)->setCheckState(0,Qt::Unchecked);
             }
         }
         else
         {
             updateParentItem(item);
         }
     }

updateParentItem 函数的实现;

  QTreeWidgetItem* parent=item->parent();
      if(parent==NULL)
      {
          return;
      }
      int selectedCount =0;
      int childCount =parent->childCount();
      for(int i=0;i<childCount;i++)
      {
          QTreeWidgetItem* childItem=parent->child(i);
          if(childItem->checkState(0)==Qt::Checked)
          {
              selectedCount++;
          }
      }
      if(selectedCount<=0)
      {
          parent->setCheckState(0,Qt::Unchecked);
      }
      else if(selectedCount>0&&selectedCount<childCount)
      {
          //部分选中状态
          parent->setCheckState(0,Qt::PartiallyChecked);
      }
      else if(selectedCount==childCount)
      {
          parent->setCheckState(0,Qt::Checked);
      }

到此,相信大家对“Qt中树形控件Tree Widget的使用方法有哪些”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

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

(0)

相关推荐

  • 代理ip服务器要遵循的关键步骤有哪几个

    技术代理ip服务器要遵循的关键步骤有哪几个代理ip服务器要遵循的关键步骤有哪几个,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代理ip服务器要遵循几个关键步

    攻略 2021年10月28日
  • 刷抖音粉丝平台,抖音花钱刷粉丝价格多少?

    技术刷抖音粉丝平台,抖音花钱刷粉丝价格多少?抖音大家买真是粉丝或者买关注之类的大部分都是需要付费的,不过现在市面上这些业务平台的价格有高有低的。大家需要妥善地判断,如果有不太清楚不太了解的小伙伴,下面小编就给大家带来抖音

    测评 2021年11月11日
  • 怎么理解docker zookeeper

    技术怎么理解docker zookeeper怎么理解docker zookeeper,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。docke

    攻略 2021年11月12日
  • 怎么用Visio画UML图

    技术怎么用Visio画UML图小编给大家分享一下怎么用Visio画UML图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用Visio画UML图

    攻略 2021年12月4日
  • SQL注入和SQL注入工具的基础知识是什么

    技术SQL注入和SQL注入工具的基础知识是什么这期内容当中小编将会给大家带来有关SQL注入和SQL注入工具的基础知识是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。黑客数据库的主要

    攻略 2021年12月1日
  • SparkSQL是什么意思

    技术SparkSQL是什么意思这篇文章主要介绍了SparkSQL是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Spark是时下很火的计算框架,由

    攻略 2021年12月10日