青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

zhonghua

C++博客 首頁 新隨筆 聯系 聚合 管理
  72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks
今天簡單說一下Qt的樹形控件,在Qt中樹形控件的名稱叫做QTreeWidget,而控件里的樹節點的名稱叫做QTreeWidgetItem。今天這 里講的是如何創建具有復選框的樹形控件,這種控件其實有時挺有用的,如飛信群發短信時的選擇聯系人的界面中就使用了有復選框的樹形控件。先來看一下長什么 樣的:

當選中頂層的樹形節點時,子節點全部被選中,當取消頂層樹形節點時,子節點全部被取消選中狀態,而當選中子節點時,父節點顯示部分選中的狀態。

      要實現這種界面其實很簡單的。在Qt的設計器中,拖出一個QTreeWidget,然后在主窗口中寫一個函數init初始化界面,連接樹形控件的節點改變 信號itemChanged(QTreeWidgetItem* item, int column),實現這個信號的即可。下面是具體代碼:

      ui.setupUi(this);

       //初始化
        init();

     //連接信號和槽

      connect(ui.treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(treeItemChanged(QTreeWidgetItem*, int)));

void TreeWidgetTest::init()
{
    ui.treeWidget->clear();

   //第一個分組
   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, "subItem13");
  subItem13->setCheckState(0, Qt::Unchecked);

  QTreeWidgetItem *subItem14 = new QTreeWidgetItem(group1);
  subItem14->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  subItem14->setText(0, "subItem14");
  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 *subItem21 = new QTreeWidgetItem(group2);
  subItem21->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  subItem21->setText(0, "subItem21");
  subItem21->setCheckState(0, Qt::Unchecked);

  QTreeWidgetItem *subItem22 = new QTreeWidgetItem(group2);
  subItem22->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  subItem22->setText(0, "subItem22");
  subItem22->setCheckState(0, Qt::Unchecked);

  QTreeWidgetItem *subItem23 = new QTreeWidgetItem(group2);
  subItem23->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  subItem23->setText(0, "subItem23");
  subItem23->setCheckState(0, Qt::Unchecked);

}

void TreeWidgetTest::treeItemChanged(QTreeWidgetItem* item, int column)
{
  QString itemText = item->text(0);
  //選中時
if (Qt::Checked == item->checkState(0))
{
   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);
   }
}

}

void TreeWidgetTest::updateParentItem(QTreeWidgetItem* item)
{
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);
}

//changeFromUser = true;

}

      上面需要注意的是,當用代碼setCheckState后,會觸發itemChanged事件,有時這個會帶來麻煩,這時需要加一些標志來判斷是由用戶操作產生的還是程序本身代碼產生的。

posted on 2012-03-31 10:49 米米 閱讀(3276) 評論(0)  編輯 收藏 引用 所屬分類: qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            狂野欧美一区| 国产精品第三页| 在线不卡中文字幕播放| 久久女同精品一区二区| 久久精品国产亚洲高清剧情介绍| 国产精品xvideos88| 亚洲欧美日韩国产精品| 午夜精品久久99蜜桃的功能介绍| 国产精品综合av一区二区国产馆| 久久久久久9| 久久人人爽人人爽爽久久| 亚洲欧洲一区二区在线观看| 亚洲人成小说网站色在线| 欧美三区美女| 久久精品夜夜夜夜久久| 久久久天天操| 宅男精品视频| 午夜精品免费视频| 亚洲第一网站免费视频| 日韩视频免费观看高清在线视频 | 久久精品国产久精国产思思| 久久大香伊蕉在人线观看热2| 在线精品福利| 亚洲天堂激情| 黄色成人免费观看| 亚洲精一区二区三区| 国产乱肥老妇国产一区二 | 亚洲高清电影| 亚洲免费观看视频| 雨宫琴音一区二区在线| 日韩午夜精品视频| 国内成+人亚洲+欧美+综合在线| 亚洲高清不卡在线观看| 国产老肥熟一区二区三区| 亚洲电影免费观看高清完整版在线观看| 欧美日韩国产综合新一区| 久久精品免费电影| 欧美日韩国产123| 六月婷婷一区| 国产精品久久久久久久一区探花| 免费在线欧美黄色| 国产欧美韩国高清| 亚洲欧洲在线视频| 尤物在线精品| 亚洲男女自偷自拍图片另类| 日韩亚洲欧美中文三级| 久久性天堂网| 久久久国产精品一区| 欧美三日本三级少妇三99| 亚洲高清免费| 亚洲福利在线看| 欧美在线资源| 久久av老司机精品网站导航| 欧美日韩免费高清一区色橹橹| 欧美chengren| 尤物在线观看一区| 久久激情视频免费观看| 久久成人国产精品| 国产精品区一区| 亚洲主播在线| 亚洲综合视频网| 欧美三级视频在线播放| 91久久夜色精品国产九色| 亚洲国产美国国产综合一区二区| 久久国产黑丝| 你懂的国产精品永久在线| 精品电影在线观看| 久久精品夜夜夜夜久久| 另类激情亚洲| 亚洲狠狠丁香婷婷综合久久久| 久久久国产精彩视频美女艺术照福利| 欧美在线免费一级片| 国产亚洲欧美中文| 久久精品女人天堂| 免费观看成人www动漫视频| 有码中文亚洲精品| 免费欧美网站| 99成人精品| 香蕉成人伊视频在线观看| 国产深夜精品| 久久免费视频一区| 亚洲人成网站色ww在线| 亚洲一二三区在线观看| 欧美午夜一区| 欧美一区二区在线视频| 蜜桃av综合| 日韩一级二级三级| 国产精品伦子伦免费视频| 欧美一区二区三区的| 免费观看亚洲视频大全| 99av国产精品欲麻豆| 国产精品看片资源| 久久精品视频99| 亚洲国产综合91精品麻豆| 亚洲欧美另类国产| 在线观看亚洲一区| 欧美日韩视频一区二区| 性做久久久久久久久| 免费欧美在线视频| 亚洲午夜国产成人av电影男同| 国产日韩精品一区二区三区| 久久一区精品| 亚洲一区视频在线| 亚洲大胆视频| 久久国产日韩欧美| 一区二区电影免费在线观看| 国产亚洲精品一区二555| 欧美成人精品h版在线观看| 亚洲性感激情| 欧美黄色视屏| 久久久www免费人成黑人精品 | 欧美午夜在线观看| 久久午夜av| 香蕉亚洲视频| 99日韩精品| 亚洲国产婷婷| 久久综合久色欧美综合狠狠| 亚洲天堂免费观看| 亚洲三级免费| 亚洲第一伊人| 韩国av一区二区三区四区| 欧美视频中文字幕在线| 男女激情久久| 久久久久久一区| 午夜欧美理论片| 一区二区三区日韩欧美精品| 亚洲国产精品久久久久秋霞影院| 久久精品日韩欧美| 亚洲欧美在线高清| 亚洲一级片在线观看| 亚洲乱码精品一二三四区日韩在线| 国产综合色精品一区二区三区| 欧美日韩在线亚洲一区蜜芽 | 亚洲性夜色噜噜噜7777| 99精品国产在热久久下载| 亚洲国产黄色片| 另类av一区二区| 久久久国产亚洲精品| 欧美一区二区视频免费观看| 亚洲一区二区三区四区五区黄 | 国产人成一区二区三区影院| 国产精品国产三级国产a| 欧美精品一区在线播放| 欧美福利视频在线观看| 欧美大片免费| 欧美精品国产精品| 欧美精品午夜视频| 欧美片第一页| 欧美深夜福利| 欧美性做爰猛烈叫床潮| 欧美四级剧情无删版影片| 欧美日韩在线视频观看| 欧美视频二区36p| 国产精品每日更新| 国产精品一区久久久久| 国产精品综合久久久| 国产一区二区激情| 亚洲第一精品在线| 亚洲精品一线二线三线无人区| 亚洲精品一二三| 亚洲免费人成在线视频观看| 亚洲欧美电影院| 久久精品最新地址| 欧美黄色大片网站| 一本色道久久综合精品竹菊 | 欧美国产日本| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品国产无天堂网2021| aa日韩免费精品视频一| 亚洲摸下面视频| 久久久久久亚洲精品中文字幕 | 亚洲综合成人婷婷小说| 久久精品2019中文字幕| 美日韩在线观看| 欧美午夜在线| 韩国女主播一区| 日韩亚洲综合在线| 亚洲欧美三级在线| 免费视频一区二区三区在线观看| 亚洲欧洲精品一区二区三区| 在线一区观看| 久久夜色精品国产欧美乱| 欧美日韩综合一区| 伊伊综合在线| 午夜视频久久久| 欧美刺激性大交免费视频| 亚洲午夜精品福利| 欧美成人午夜激情在线| 国产日韩精品一区二区三区 | 亚洲国产高清在线观看视频| 一本色道久久综合狠狠躁篇的优点| 欧美一级免费视频| 亚洲国产日韩欧美在线动漫| 亚洲综合社区| 欧美日本国产一区| 精品成人在线视频| 欧美一级播放| 99视频精品全国免费| 美女国产一区| 黑丝一区二区|