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

zhonghua

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

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

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

      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++)
    {
     //子節(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);
   }
}

}

void TreeWidgetTest::updateParentItem(QTreeWidgetItem* item)
{
QTreeWidgetItem *parent = item->parent();
if (parent == NULL)
{
   return;
}

//選中的子節(jié)點個數(shù)
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)
{
   //選中狀態(tài)
   parent->setCheckState(0, Qt::Unchecked);
}
else if (selectedCount > 0 && selectedCount < childCount)
{
   //部分選中狀態(tài)
   parent->setCheckState(0, Qt::PartiallyChecked);
}
else if (selectedCount == childCount)
{
  //未選中狀態(tài)
   parent->setCheckState(0, Qt::Checked);
}

//changeFromUser = true;

}

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

posted on 2012-03-31 10:49 米米 閱讀(3265) 評論(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>
            亚洲乱亚洲高清| 午夜精品一区二区三区四区 | 欧美一区二区三区男人的天堂 | 久久在线视频| 狂野欧美激情性xxxx欧美| 国产精品实拍| 亚洲欧美日韩国产综合| 久久精品国产清高在天天线| 国产午夜精品一区理论片飘花| 亚洲一区成人| 欧美 日韩 国产一区二区在线视频| 国产精品手机视频| 国产精品色一区二区三区| 国产欧亚日韩视频| 欧美成人精品激情在线观看| 亚洲久久成人| 亚洲丝袜av一区| 久久亚洲精品一区二区| 99riav1国产精品视频| 欧美激情视频给我| 欧美大香线蕉线伊人久久国产精品| 日韩天堂av| 亚洲一区欧美一区| 狠狠爱www人成狠狠爱综合网| 麻豆av一区二区三区| 久久久久久亚洲精品中文字幕| 欧美成人午夜77777| 欧美日韩精品一区二区在线播放| 午夜精品久久久久久99热软件| 欧美亚洲在线播放| 在线视频日韩| 亚洲精品国产精品国产自| 欧美一区影院| 99国产精品99久久久久久粉嫩 | 久久婷婷久久| 日韩视频二区| 美女图片一区二区| 久久国产精品一区二区三区四区| 久久综合九色| 一区二区冒白浆视频| 欧美xart系列在线观看| 一本色道**综合亚洲精品蜜桃冫| 久久久在线视频| 国产精品美女午夜av| 欧美粗暴jizz性欧美20| 国产一区二区三区日韩欧美| 国产精品毛片va一区二区三区| 亚洲电影av| 好看不卡的中文字幕| 亚洲图片在线观看| 亚洲精品一区二区三区不| 狠狠色伊人亚洲综合网站色| 亚洲午夜久久久久久尤物| 一本一本a久久| 一区二区三区欧美视频| 亚洲精品免费看| 另类春色校园亚洲| 国产精品久久久久久久久久ktv| 一本不卡影院| 欧美成人dvd在线视频| 午夜伦理片一区| 欧美日韩午夜视频在线观看| 欧美久久电影| 国产精品99免视看9| 国产欧美日韩精品a在线观看| 中国亚洲黄色| 一区二区高清在线| 欧美日韩99| 亚洲色图制服丝袜| 艳妇臀荡乳欲伦亚洲一区| 欧美韩国在线| 国产精品免费aⅴ片在线观看| 一区二区三区四区五区精品视频| 亚洲欧洲午夜| 一区二区三区色| 欧美三级小说| 国产日韩精品视频一区| 亚洲欧美在线视频观看| 久久精品一区二区| 久久综合99re88久久爱| 午夜免费久久久久| 国模私拍一区二区三区| 亚洲精品国产视频| 亚洲国产婷婷| 午夜一区二区三区在线观看| 国产午夜精品福利 | 媚黑女一区二区| 男女激情久久| 国产免费成人| 亚洲国产二区| 亚洲精品一区二区三区99| 亚洲欧美日韩另类| 欧美99久久| 欧美承认网站| 午夜一区二区三区不卡视频| 欧美va天堂在线| 欧美国产日韩一区二区三区| 亚洲一区二区视频在线| 先锋亚洲精品| 亚洲精品之草原avav久久| 亚洲国产精品成人久久综合一区| 欧美第十八页| 国产精品日产欧美久久久久| 美女久久一区| 欧美日韩在线不卡一区| 欧美在线综合视频| 亚洲欧洲一区二区三区在线观看 | 欧美大片免费看| 国产精品v欧美精品∨日韩| 欧美一区国产二区| 久久伊人免费视频| 国产真实乱偷精品视频免| 欧美成人精品一区二区三区| 欧美视频观看一区| 欧美国产乱视频| 亚洲欧美精品中文字幕在线| 欧美日韩日本国产亚洲在线| 午夜亚洲伦理| 欧美日韩国产在线看| 久久久无码精品亚洲日韩按摩| 亚洲午夜日本在线观看| 亚洲国产高清一区| 亚洲综合电影| 亚洲一区免费看| 亚洲综合不卡| 亚洲自拍16p| 欧美日韩亚洲一区二区| 嫩草成人www欧美| 国产色婷婷国产综合在线理论片a| 亚洲精品久久嫩草网站秘色 | 亚洲精品欧美一区二区三区| 亚洲男人av电影| 一区二区日本视频| 欧美丰满少妇xxxbbb| 久久这里有精品15一区二区三区| 国产精品中文在线| 一区二区三区久久| 国产精品99久久久久久宅男| 欧美剧在线观看| 亚洲欧洲精品一区二区三区| 在线播放国产一区中文字幕剧情欧美 | 亚洲国产成人高清精品| 欧美成年人视频| 欧美~级网站不卡| 黄色成人在线| 久热精品视频在线观看| 免费成人av在线看| 亚洲国产精品va在看黑人| 久久久久久亚洲综合影院红桃| 久久亚洲精品网站| 亚洲国产高清一区| 欧美福利一区| 亚洲精品日韩欧美| 亚洲欧美日韩国产综合| 国产精品自在线| 国产精品日韩专区| 亚洲视频在线看| 国产伦一区二区三区色一情| 亚洲一区二区三区在线| 午夜一级久久| 在线激情影院一区| 女人色偷偷aa久久天堂| 亚洲精品久久久久久久久久久久| 一个色综合导航| 国产欧美视频在线观看| 久久久精品tv| 中文精品视频| 国产精品自拍网站| 久久中文精品| 99精品国产福利在线观看免费 | 亚洲欧美日本日韩| 国产精品乱子乱xxxx| 久久九九久精品国产免费直播| 欧美激情一区二区三区在线视频| av不卡在线观看| 国产日韩欧美电影在线观看| 乱码第一页成人| 午夜一级在线看亚洲| 欧美激情亚洲精品| 午夜精品福利一区二区三区av| 亚洲国产精品一区二区第四页av| 欧美视频在线观看一区| 欧美一站二站| 亚洲精品在线视频| 久久成人精品电影| 亚洲人妖在线| 久久精品视频va| 亚洲精品一区二区三区四区高清| 欧美一区二区三区在线播放| 亚洲激情成人网| 亚洲欧美影院| 欧美成人精品h版在线观看| 午夜久久影院| 国产日本欧美视频| 亚洲自拍16p| 亚洲美洲欧洲综合国产一区| 久久久视频精品| 西瓜成人精品人成网站| 狠狠狠色丁香婷婷综合激情| 欧美激情一二三区|