QTreeWidget
生活随笔
收集整理的這篇文章主要介紹了
QTreeWidget
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 QTreeWidget
- 1.1 QTreeWidget簡介
1 QTreeWidget
1.1 QTreeWidget簡介
在 Qt 中的樹形控件稱為 QTreeWidget,而控件里的樹形節點稱為 QTreeWidgetItem。
實現的功能:
- 創建樹形控件,當選中頂層樹形節點時,子節點全部選中。
- 部分選中狀態:當選中部分子節點時,頂層樹形節點處于灰色未全部選中狀態。
- 當子節點全部選中,頂層節點變為選中狀態。
源文件如下:
#include "widget.h" #include "ui_widget.h" #include <qdebug.h>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);init();connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int))); }Widget::~Widget() {delete ui; }void Widget::init() {ui->treeWidget->clear(); //初始化樹形控件//定義第一個樹形組QTreeWidgetItem* group1 = new QTreeWidgetItem(ui->treeWidget);group1->setText(0,"水果"); //樹形控件顯示的文本信息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->setCheckState(0,Qt::Unchecked); //設置子選項的顯示格式和狀態QTreeWidgetItem* subItem12 = new QTreeWidgetItem(group1);subItem12->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);subItem12->setText(0,"香蕉");subItem12->setCheckState(0,Qt::Unchecked);QTreeWidgetItem* subItem13 = new QTreeWidgetItem(group1);subItem13->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);subItem13->setText(0,"葡萄");subItem13->setCheckState(0,Qt::Unchecked);//定義第二個樹形組QTreeWidgetItem* group2 = new QTreeWidgetItem(ui->treeWidget);group2->setText(0,"飲料");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->setCheckState(0,Qt::Unchecked);QTreeWidgetItem* subItem22 = new QTreeWidgetItem(group2);subItem22->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);subItem22->setText(0,"啤酒");subItem22->setCheckState(0,Qt::Unchecked);QTreeWidgetItem* subItem23 = new QTreeWidgetItem(group2);subItem23->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);subItem23->setText(0,"紅酒");subItem23->setCheckState(0,Qt::Unchecked); }void Widget::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 Widget::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);qDebug() << "::未選中狀態";}else if(selectedCount>0 && selectedCount<childCount) //如果有部分子項被選中,父項設置為部分選中狀態,即用灰色顯示{parent->setCheckState(0,Qt::PartiallyChecked);qDebug() << "::部分選中狀態";}else if(selectedCount == childCount) //如果子項全部被選中,父項則設置為選中狀態{parent->setCheckState(0,Qt::Checked);qDebug() << "::選中狀態";} }總結
以上是生活随笔為你收集整理的QTreeWidget的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 征信多久可以打第二次
- 下一篇: 俄升级T-90S主战坦克