0


QT学习之[QTreeWidgetItem]详解,示例

QTreeWidgetItem

树形控件,当选中顶层树形节点时,子节点全部被选中,当取消选择顶层数节点时,子节点全部被取消,当选中子节点时候,父节点显示被选中,示例如下:

用法以及API详解如图:

图片AIt
在这里插入图片描述

第一步:

双击UI文件选择,打开ui设计器,拖拽一个Tree Widget 控件,

第二步:

在.h头文件中添加代码:

#include<QTreeWidgetItem>

在widget声明处添加代码:

public:Widget(QWidget *parent =nullptr);~Widget();voidinit();voidupdataParentItem(QTreeWidgetItem* item);private slots:voidtreeItemChanged(QTreeWidgetItem* item,int column);private:
    QTreeWidgetItem* group1;
    QTreeWidgetItem* group2;
    QTreeWidgetItem* group3;
    QTreeWidgetItem* subItem1;
    QTreeWidgetItem* subItem2;
    QTreeWidgetItem* subItem3;
    QTreeWidgetItem* subItem4;
    QTreeWidgetItem* subItem5;
    QTreeWidgetItem* subItem6;
    QTreeWidgetItem* subItem7;
    QTreeWidgetItem* subItem8;
    QTreeWidgetItem* subItem9;

在widget构造函数添加代码:

//初始化页面init();//发射信号接受相应connect(ui>treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));}

init():

voidWidget::init(){
    ui->treeWidget->clear();//第一个分组
   group1 =newQTreeWidgetItem(ui->treeWidget);
   group1->setText(0,"group1");
   group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   group1->setCheckState(0,Qt::Unchecked);

   subItem1 =newQTreeWidgetItem(group1);
   subItem1->setText(0,"subItem1");
   subItem1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem1->setCheckState(0,Qt::Unchecked);

   subItem2 =newQTreeWidgetItem(group1);
   subItem2->setText(0,"subItem2");
   subItem2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem2->setCheckState(0,Qt::Unchecked);

   subItem3 =newQTreeWidgetItem(group1);
   subItem3->setText(0,"subItem3");
   subItem3->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem3->setCheckState(0,Qt::Unchecked);

   subItem4 =newQTreeWidgetItem(group1);
   subItem4->setText(0,"subItem4");
   subItem4->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem4->setCheckState(0,Qt::Unchecked);//分组2

   group2 =newQTreeWidgetItem(ui->treeWidget);
   group2->setText(0,"group2");
   group2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   group2->setCheckState(0,Qt::Unchecked);

   subItem5 =newQTreeWidgetItem(group2);
   subItem5->setText(0,"subItem5");
   subItem5->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem5->setCheckState(0,Qt::Unchecked);

   subItem6 =newQTreeWidgetItem(group2);
   subItem6->setText(0,"subItem6");
   subItem6->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem6->setCheckState(0,Qt::Unchecked);

   subItem7 =newQTreeWidgetItem(group2);
   subItem7->setText(0,"subItem7");
   subItem7->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem7->setCheckState(0,Qt::Unchecked);

   subItem8 =newQTreeWidgetItem(group2);
   subItem8->setText(0,"subItem8");
   subItem8->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
   subItem8->setCheckState(0,Qt::Unchecked);}

updataParentItem():

voidWidget::updataParentItem(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);}elseif(selectedCount >0&& selectedCount < ChildCount){//部分选中
        parent->setCheckState(0,Qt::PartiallyChecked);}if(selectedCount == ChildCount){//全选中
        parent->setCheckState(0,Qt::Checked);}}

treeItemChanged():

//QTreeWidgetItem自带的信号changItem两个参数,所以这里槽函数也有两个参数voidWidget::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{//是子节点updataParentItem(item);}}elseif(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{updataParentItem(item);}}}
标签: qt 学习 ui

本文转载自: https://blog.csdn.net/m0_68197012/article/details/130035626
版权归原作者 进击者周星星 所有, 如有侵权,请联系我们删除。

“QT学习之[QTreeWidgetItem]详解,示例”的评论:

还没有评论