QTreeWidget 树控件

发布时间 2023-10-26 17:26:59作者: Jeffxue

显示树形结构的控件一般为 QTreeWidget,该控件会让各个条目以树形结构来显示。

如下图所示,为一个树形结构,Root 为根节点,一级子节点为 sheet1, sheet2,每个一级子节点下面又会有自己的子成员。

对应的代码为:

#include <QTreeWidget>
#include <QTreeWidgetItem>

// Tree控件用来承载整个TreeItem
QTreeWidget* tree = new QTreeWidget(ui.widget);
tree->setHeaderHidden(true); // 隐藏标头

// 0. 根节点
QTreeWidgetItem* itemRoot = new QTreeWidgetItem(tree);
itemRoot->setText(0, "Root");
itemRoot->setCheckState(0, Qt::Unchecked); // 控制每个item前面是否显示CheckBox

// 1-1. 一级节点
QTreeWidgetItem* sheet1 = new QTreeWidgetItem(itemRoot, 1);
sheet1->setText(0, "sheet1");
sheet1->setCheckState(0, Qt::Checked);

// 2-1. 二级节点
QTreeWidgetItem* var11 = new QTreeWidgetItem(sheet1, 2);
QTreeWidgetItem* var12 = new QTreeWidgetItem(sheet1, 2);
QTreeWidgetItem* var13 = new QTreeWidgetItem(sheet1, 2);
var11->setText(0, "x01");
var12->setText(0, "x02");
var13->setText(0, "x03");

var11->setCheckState(0, Qt::Checked);
var12->setCheckState(0, Qt::Checked);
var13->setCheckState(0, Qt::Checked);

// 1-2. 一级节点
QTreeWidgetItem* sheet2 = new QTreeWidgetItem(itemRoot, 1);
sheet2->setText(0, "sheet2");
sheet2->setCheckState(0, Qt::Checked);

// 2-2. 二级节点
QTreeWidgetItem* var21 = new QTreeWidgetItem(sheet2, 2);
QTreeWidgetItem* var22 = new QTreeWidgetItem(sheet2, 2);
var21->setText(0, "Y01");
var22->setText(0, "Y02");

var21->setCheckState(0, Qt::Unchecked);
var22->setCheckState(0, Qt::Unchecked);

tree->expandAll();
int cnt = tree->topLevelItemCount();


主要的API整理:

QTreeWidget

Function:

  • addTopLevelItem(QTreeWidgetItem *item):用来添加根节点,即上图的 Root,每个层次的节点个数不限。
  • setHeaderLabel(const QString &label):QTreeWidget的标题,一般会将其进行隐藏
  • setHeaderHidden(bool ):隐藏树结构的标题
  • topLevelItemCount() const:当前树结构有多少个根节点,不包含根节点的子节点。
  • expandAll():所有项都展开。

Signal

  • itemClicked(QTreeWidgetItem *item, int column):常用的点击每个条目会触发对应的信号

QTreeWidgetItem 类表示每个节点条目

  • childCount() const:每个item的子成员个数
  • checkState(int column) const:只要调用该函数,不管设置什么状态,该item前就会出现CheckBox选项。
  • addChild(QTreeWidgetItem *child):为当前item添加子成员
  • setText(int column, const QString &text):设置item显示的内容
  • type() const:是int类型,相当于标志位,在创建该对象的时候设置,用来区分具体点击的哪一个item,从而进行对应的处理。
  • setIcon(int column, const QIcon &icon):设置当前 item 的icon。

item中的column一般都是0,因为基本只有一列