QTreeWidget

main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <QApplication>
#include <QWidget>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QVBoxLayout>
#include <QHeaderView>
#include <QDebug>

void setupTreeWidgetDemo(QWidget *parent) {
QVBoxLayout *layout = new QVBoxLayout(parent);

// --- 1. 创建树插件 ---
QTreeWidget *treeWidget = new QTreeWidget(parent);

// 设置列数和表头
treeWidget->setColumnCount(2);
treeWidget->setHeaderLabels({"名称", "详情"});

// 让表头自动伸展
treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);

// --- 2. 创建父节点 A ---
QTreeWidgetItem *parentItemA = new QTreeWidgetItem(treeWidget);
parentItemA->setText(0, "水果");
parentItemA->setIcon(0, parent->style()->standardIcon(QStyle::SP_DirIcon));

// 为父节点 A 添加子节点
QTreeWidgetItem *childA1 = new QTreeWidgetItem(parentItemA);
childA1->setText(0, "苹果");
childA1->setText(1, "红富士");

QTreeWidgetItem *childA2 = new QTreeWidgetItem(parentItemA);
childA2->setText(0, "香蕉");
childA2->setText(1, "进口");

// --- 3. 创建父节点 B (带复选框) ---
QTreeWidgetItem *parentItemB = new QTreeWidgetItem(treeWidget);
parentItemB->setText(0, "蔬菜");

QTreeWidgetItem *childB1 = new QTreeWidgetItem(parentItemB);
childB1->setText(0, "土豆");
childB1->setCheckState(0, Qt::Unchecked); // 让子节点带复选框

// 默认展开所有节点
treeWidget->expandAll();

// --- 4. 信号槽:点击节点 ---
QObject::connect(treeWidget, &QTreeWidget::itemClicked, [](QTreeWidgetItem *item, int column) {
qDebug() << "点击了节点:" << item->text(0) << " 所在列:" << column;
});

layout->addWidget(treeWidget);
}

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget w;
w.setWindowTitle("QTreeWidget 层次结构演示");
w.resize(400, 300);
setupTreeWidgetDemo(&w);
w.show();
return a.exec();
}