0
点赞
收藏
分享

微信扫一扫

Qt(二)UI控件简介与 可选树状控件演示


文章目录

  • ​​一、UI控件简介​​
  • ​​二、可选列表控件演示​​

一、UI控件简介

Qt(二)UI控件简介与 可选树状控件演示_ui


Qt(二)UI控件简介与 可选树状控件演示_#include_02


Qt(二)UI控件简介与 可选树状控件演示_#include_03

二、可选列表控件演示

新建widget简单应用,打开.ui文件,拖拽TreeWidget。
编辑源码如下:main.cpp文件不动。

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTreeWidgetItem>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
Q_OBJECT

public:
Widget(QWidget *parent = nullptr);
~Widget();

//
void InitUi();
void UpdateParentItem(QTreeWidgetItem * item);
public slots:
void TreeItemChanged(QTreeWidgetItem * item, int column);

private:
Ui::Widget *ui;
};
#endif // WIDGET_H

//widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("世界高校排行榜");

QString str = "高校名称";
ui->treeWidget->setHeaderLabel(str);

//初始化treeweidgets
InitUi();
connect(ui->treeWidget,
SIGNAL(itemChanged(QTreeWidgetItem *,int)),
this,
SLOT(TreeItemChanged(QTreeWidgetItem *,int)));
}


void Widget::InitUi()
{
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 *subItemx1 = new QTreeWidgetItem(group1);
subItemx1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemx1->setText(0,"麻省理工学院");
subItemx1->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemx2 = new QTreeWidgetItem(group1);
subItemx2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemx2->setText(0,"清华大学");
subItemx2->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemx3 = new QTreeWidgetItem(group1);
subItemx3->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemx3->setText(0,"牛津大学");
subItemx3->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemx4 = new QTreeWidgetItem(group1);
subItemx4->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemx4->setText(0,"哈弗大学");
subItemx4->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemx5 = new QTreeWidgetItem(group1);
subItemx5->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemx5->setText(0,"剑桥大学");
subItemx5->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 *subItemy1 = new QTreeWidgetItem(group2);
subItemy1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemy1->setText(0,"清华大学");
subItemy1->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemy2 = new QTreeWidgetItem(group2);
subItemy2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemy2->setText(0,"北京大学");
subItemy2->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemy3 = new QTreeWidgetItem(group2);
subItemy3->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemy3->setText(0,"复旦大学");
subItemy3->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemy4 = new QTreeWidgetItem(group2);
subItemy4->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemy4->setText(0,"武汉大学");
subItemy4->setCheckState(0,Qt::Unchecked);

QTreeWidgetItem *subItemy5 = new QTreeWidgetItem(group2);
subItemy5->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
subItemy5->setText(0,"四川大学");
subItemy5->setCheckState(0,Qt::Unchecked);
}


void Widget::UpdateParentItem(QTreeWidgetItem * item)
{
QTreeWidgetItem* parent = item->parent();
if(parent ==NULL)return;

//选择子节点个数
int selectCount = 0;
int childCount = parent->childCount();
for (int i=0;i<childCount;i++) {
QTreeWidgetItem* childItem = parent->child(i);
if(childItem->checkState(0) == Qt::Checked){
selectCount++;
}
}

if(selectCount<=0){
parent->setCheckState(0,Qt::Unchecked); //选中
}else if(selectCount>0 && selectCount<childCount){
parent->setCheckState(0,Qt::PartiallyChecked); //部分选中
}else if(selectCount==childCount){
parent->setCheckState(0,Qt::Checked); //未选中
}
}


void Widget::TreeItemChanged(QTreeWidgetItem * item, int column)
{
QString itemText = item->text(0);
if(Qt::Checked ==item->text(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);
}
}
}




Widget::~Widget()
{
delete ui;
}

演示效果:

Qt(二)UI控件简介与 可选树状控件演示_开发语言_04


问题待解决:勾选父节点无法选中全部子节点,不知道出了什么问题,请高手指点。


举报

相关推荐

0 条评论