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

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>
            国产一区二区三区四区hd| 激情欧美一区二区| 中日韩午夜理伦电影免费| 亚洲黄色免费| 欧美成人a视频| 99ri日韩精品视频| 日韩亚洲一区在线播放| 国产精品久久二区二区| 欧美在线观看天堂一区二区三区| 午夜精品美女久久久久av福利| 国产日韩欧美视频| 久久一区二区三区四区| 美女在线一区二区| 亚洲性感激情| 亚久久调教视频| 亚洲国产一区在线| 亚洲美女淫视频| 国产午夜一区二区三区| 免费观看欧美在线视频的网站| 免费视频久久| 欧美在线观看视频| 女人天堂亚洲aⅴ在线观看| 国产精品99久久久久久白浆小说 | 中文精品视频| 午夜综合激情| 日韩午夜视频在线观看| 亚洲欧美另类国产| 亚洲精品网址在线观看| 亚洲午夜精品久久久久久浪潮 | 欧美精品一区二区三区蜜桃| 亚洲欧美bt| 牛牛国产精品| 欧美专区一区二区三区| 欧美第一黄网免费网站| 久久国产精品一区二区三区四区| 你懂的视频一区二区| 久久黄色影院| 欧美日韩在线三区| 欧美二区在线播放| 国产私拍一区| 亚洲视频第一页| 亚洲乱码国产乱码精品精可以看| 午夜欧美大尺度福利影院在线看| 日韩午夜av电影| 久久亚洲美女| 久久久久久电影| 国产精品亚洲一区| 日韩午夜av电影| 亚洲精品视频免费| 久久天天躁狠狠躁夜夜av| 欧美一级专区| 国产精品国产三级国产aⅴ浪潮| 亚洲国产91精品在线观看| 国产欧美一区二区三区在线看蜜臀| 最新国产成人av网站网址麻豆 | 国自产拍偷拍福利精品免费一| 日韩视频在线观看| 最新国产乱人伦偷精品免费网站| 久久精品亚洲一区| 久久久久国产免费免费| 国产日本亚洲高清| 亚洲欧美视频一区| 久久riav二区三区| 国产日本欧美在线观看 | 亚洲高清一区二区三区| 在线成人激情视频| 久久久久久久精| 久久综合图片| 精品动漫3d一区二区三区免费版 | 久久久精品日韩欧美| 久久国产欧美日韩精品| 国产精品美女久久久久久2018| 亚洲深夜福利| 午夜精品久久久久影视| 国产精品美女www爽爽爽视频 | 久色婷婷小香蕉久久| 国产一区二区中文字幕免费看| 午夜精品久久| 久久另类ts人妖一区二区| 国产亚洲一区二区三区| 久久精品一区二区| 欧美a级片一区| 亚洲三级网站| 欧美视频国产精品| 亚洲欧美日韩综合aⅴ视频| 久久黄金**| 亚洲日本成人| 欧美日韩精品一区二区天天拍小说| 夜夜夜精品看看| 欧美伊人久久大香线蕉综合69| 国产亚洲精品bt天堂精选| 久久久久久高潮国产精品视| 奶水喷射视频一区| 一区二区不卡在线视频 午夜欧美不卡'| 欧美女同在线视频| 亚洲欧美www| 欧美国产在线电影| 亚洲综合色丁香婷婷六月图片| 国产日韩欧美成人| 欧美成人蜜桃| 亚洲欧美在线看| 欧美成ee人免费视频| 亚洲一卡久久| 亚洲高清久久| 国产精品久久久久久久久动漫| 久久久久久久久久码影片| 99精品国产99久久久久久福利| 久久国产毛片| 中文精品在线| 影音欧美亚洲| 国产欧美亚洲精品| 欧美激情一区二区三区在线视频观看 | 国产日韩一区二区| 欧美激情第一页xxx| 亚洲欧美日本在线| 亚洲国产欧美日韩精品| 欧美与黑人午夜性猛交久久久| 亚洲激情视频| 国内成人自拍视频| 欧美午夜视频一区二区| 久久久久国产精品午夜一区| 99视频日韩| 亚洲国内精品| 蜜臀av一级做a爰片久久| 欧美一级久久| 亚洲尤物在线| 99精品99| 99精品欧美一区| 亚洲欧洲一区二区在线播放| 国产欧美日韩综合精品二区| 欧美视频在线视频| 欧美精品在线观看播放| 另类激情亚洲| 久久久亚洲国产美女国产盗摄| 午夜伦欧美伦电影理论片| 在线亚洲精品| 一区二区国产精品| 亚洲日本欧美天堂| 亚洲黄色av一区| 亚洲人成网在线播放| 亚洲国产精品精华液2区45| 欧美不卡一卡二卡免费版| 免费成人高清视频| 老司机精品久久| 麻豆精品视频在线观看| 久久免费视频在线观看| 久久精品视频播放| 久久精品毛片| 久久综合中文色婷婷| 久久久999国产| 媚黑女一区二区| 美女免费视频一区| 男人的天堂亚洲| 亚洲电影专区| 亚洲开发第一视频在线播放| 亚洲理论在线| 亚洲图片欧美午夜| 亚洲精品乱码| 中文一区在线| 性做久久久久久久久| 久久久亚洲一区| 欧美fxxxxxx另类| 欧美另类69精品久久久久9999| 欧美日韩亚洲一区在线观看| 欧美午夜www高清视频| 国产亚洲第一区| 亚洲风情亚aⅴ在线发布| 亚洲三级色网| 先锋影音一区二区三区| 久久综合久久美利坚合众国| 欧美肥婆在线| 亚洲午夜影视影院在线观看| 欧美在线播放视频| 欧美成人精品在线| 国产精品麻豆成人av电影艾秋| 国产亚洲综合性久久久影院| 亚洲欧洲一区二区天堂久久 | 国内精品久久久久久久影视蜜臀 | 亚洲欧洲日本国产| 亚洲视频图片小说| 久久久久网站| 亚洲精品久久久蜜桃| 欧美一区二区三区日韩视频| 欧美a级在线| 国产嫩草影院久久久久| 亚洲欧洲精品一区二区三区不卡 | 亚洲视频在线观看网站| 久久久www成人免费精品| 亚洲国产天堂久久综合| 午夜天堂精品久久久久| 欧美激情久久久久久| 国产午夜久久久久| 一区二区三区 在线观看视频| 久久乐国产精品| 中国成人亚色综合网站| 欧美成人午夜激情| 精品9999| 久久精品成人| 亚洲综合视频1区| 欧美日韩精品一区视频|