最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt中樹形控件Tree Widget的使用方法匯總

 更新時間:2021年11月27日 08:47:12   作者:BOO2018  
最近小編在研究Tree Widget樹形控件的相關知識,這種控件其實有時還是很有用處的,我主要利用的是帶有復選框的樹形控件,下面通過實例代碼給大家介紹下Qt中樹形控件Tree Widget的一些使用方法,感興趣的朋友一起學習吧

最近需要用到Tree Widget樹形控件,現(xiàn)將自己的一些理解記錄下來。

Tree Widget在項目控件組(Item Widgets)里面可以找到。這種控件其實有時還是很有用處的,我主要利用的是帶有復選框的樹形控件。結(jié)果如圖所示;

當選中頂層的樹形節(jié)點時,子節(jié)點全部被選中;當取消選擇頂層樹形節(jié)點時,子節(jié)點的選中狀態(tài)將全部被取消,二當選中子節(jié)點是,父節(jié)點顯示部分選中的狀態(tài)。

幾個主要的函數(shù):

setCheckState設置復選框;

ItemIsUserCheckable 項目上是否有復選框

ItemIsEnabled 項目上是否沒有被禁用(Enabled可用/Disabled禁用)

ItemIsSelectable 項目是否可以選中

代碼:

在mainwindow.h中插入一下代碼:

    void init();
    void updateParentItem(QTreeWidgetItem *item);
 
public slots:
    void treeItemChanged(QTreeWidgetItem* item,int column);

在mainwindow構造函數(shù)中添加:

 init();
 connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));

init函數(shù)的實現(xiàn);

     QTreeWidgetItem* group1=new QTreeWidgetItem(ui->treeWidget);
     group1->setText(0,"group1");
     group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     group1->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem11=new QTreeWidgetItem(group1);
     subItem11->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem11->setText(0,"subItem11");
     subItem11->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem12=new QTreeWidgetItem(group1);
     subItem12->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
     subItem12->setText(0,"subItem12");
     subItem12->setCheckState(0,Qt::Unchecked);
 
     QTreeWidgetItem* subItem13=new QTreeWidgetItem(group1);
     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函數(shù)的實現(xiàn);

     QString itemText=item->text(0);
     //選中
     if(Qt::Checked ==item->checkState(0))//全選check打勾
     {
         QTreeWidgetItem* parent=item->parent();//定義一個節(jié)點
         int count=item->childCount();//子節(jié)點的數(shù)目
         if(count>0)
         {
             for(int i=0;i<count;i++)
             {
                 //子節(jié)點也選中
                 item->child(i)->setCheckState(0,Qt::Checked);
             }
         }
         else
         {
             //是子節(jié)點
             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 函數(shù)的實現(xiàn);

      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)
      {
          //部分選中狀態(tài)
          parent->setCheckState(0,Qt::PartiallyChecked);
      }
      else if(selectedCount==childCount)
      {
          parent->setCheckState(0,Qt::Checked);
      }

最終實現(xiàn)的就是第一張圖的效果。

到此這篇關于Qt中樹形控件Tree Widget的一些使用方法的文章就介紹到這了,更多相關Qt樹形控件Tree Widget使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • FFmpeg實現(xiàn)變速播放的兩種方法總結(jié)

    FFmpeg實現(xiàn)變速播放的兩種方法總結(jié)

    這篇文章主要為大家詳細介紹了FFmpeg中實現(xiàn)變速播放的兩種方法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下
    2023-07-07
  • C++中判斷成員函數(shù)是否重寫

    C++中判斷成員函數(shù)是否重寫

    這篇文章主要介紹了C++中判斷成員函數(shù)是否重寫的相關資料,需要的朋友可以參考下
    2017-04-04
  • C語言排序之?堆排序

    C語言排序之?堆排序

    這篇文章主要介紹了C語言排序之堆排序,文章基于C語言的相關資料展開詳細內(nèi)容,具有一定的參考資料,需要的小伙伴可以參考一下
    2022-04-04
  • 詳解C++編程中的vector類容器用法

    詳解C++編程中的vector類容器用法

    vector是一個標準庫中的容器,使用時需要包含#include <vector>頭文件,也可以說vector是一個類模板而不是一種數(shù)據(jù)類型,對它的定義,需要指定類型,需要的朋友可以參考下
    2016-05-05
  • Qt5升級到Qt6分步遷移教程小結(jié)

    Qt5升級到Qt6分步遷移教程小結(jié)

    Qt框架的一個新的長期支持版本6.5最近發(fā)布,本文主要介紹了Qt5升級到Qt6分步遷移教程小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 基于Matlab實現(xiàn)BP神經(jīng)網(wǎng)絡交通標志識別

    基于Matlab實現(xiàn)BP神經(jīng)網(wǎng)絡交通標志識別

    道路交通標志用以禁止、警告、指示和限制道路使用者有秩序地使用道路,?保障出行安全.若能自動識別道路交通標志,?則將極大減少道路交通事故的發(fā)生。本文將介紹基于Matlab實現(xiàn)BP神經(jīng)網(wǎng)絡交通標志識別,感興趣的可以學習一下
    2022-01-01
  • c++實現(xiàn)合并文件以及拆分實例代碼

    c++實現(xiàn)合并文件以及拆分實例代碼

    這篇文章主要介紹了c++實現(xiàn)合并文件以及拆分實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 深入學習C++智能指針之shared_ptr與右值引用的方法

    深入學習C++智能指針之shared_ptr與右值引用的方法

    智能指針的核心實現(xiàn)技術是引用計數(shù),每使用它一次,內(nèi)部引用計數(shù)加1,每析構一次內(nèi)部的引用計數(shù)減1,減為0時,刪除所指向的堆內(nèi)存,今天通過本文給大家分享C++智能指針之shared_ptr與右值引用的方法,需要的朋友跟隨小編一起看看吧
    2021-07-07
  • Qt QFrame的具體使用

    Qt QFrame的具體使用

    本文主要介紹了Qt QFrame的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C++事件處理中的__hook與__unhook用法詳解

    C++事件處理中的__hook與__unhook用法詳解

    這篇文章主要介紹了C++事件處理中__hook與__unhook的用法,C++中的COM類主要支持事件處理,需要的朋友可以參考下
    2016-01-01

最新評論

芒康县| 牡丹江市| 旬邑县| 桃江县| 旺苍县| 西充县| 禹城市| 泰顺县| 普宁市| 呼玛县| 尼玛县| 鄂伦春自治旗| 巴马| 石城县| 鹤庆县| 建水县| 大荔县| 湛江市| 云南省| 舞阳县| 凌源市| 科技| 绥滨县| 福清市| 荆州市| 左贡县| 拉萨市| 四子王旗| 麻江县| 宜君县| 香港| 襄樊市| 常宁市| 南汇区| 阜平县| 建水县| 沛县| 柯坪县| 呼和浩特市| 伽师县| 凤山市|