QTabWidget

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
#include <QApplication>
#include <QWidget>
#include <QTabWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QIcon>

void setupTabWidgetDemo(QWidget *parent) {
QVBoxLayout *mainLayout = new QVBoxLayout(parent);

// --- 1. 创建选项卡主控件 ---
QTabWidget *tabWidget = new QTabWidget(parent);

// --- 2. 创建第一个页签的内容 (基本信息) ---
QWidget *tab1 = new QWidget();
QVBoxLayout *layout1 = new QVBoxLayout(tab1);
layout1->addWidget(new QLabel("姓名:"));
layout1->addWidget(new QLineEdit("张三", tab1));
layout1->addWidget(new QLabel("职位:"));
layout1->addWidget(new QLineEdit("开发者", tab1));
layout1->addStretch();

// --- 3. 创建第二个页签的内容 (系统设置) ---
QWidget *tab2 = new QWidget();
QVBoxLayout *layout2 = new QVBoxLayout(tab2);
layout2->addWidget(new QPushButton("开启消息推送", tab2));
layout2->addWidget(new QPushButton("检查版本更新", tab2));
layout2->addStretch();

// --- 4. 将页签添加到 QTabWidget 中 ---
tabWidget->addTab(tab1, "基本资料");
tabWidget->addTab(tab2, "系统设置");

// 设置一些有趣的属性
tabWidget->setTabIcon(0, QIcon::fromTheme("user-info")); // 给第一个页签加图标
tabWidget->setTabsClosable(true); // 允许关闭页签
tabWidget->setMovable(true); // 允许鼠标拖动页签排序

// --- 5. 信号:切换页签时触发 ---
QObject::connect(tabWidget, &QTabWidget::currentChanged, [](int index) {
qDebug() << "切换到了第" << index + 1 << "个页签";
});

// --- 6. 信号:点击关闭按钮时触发 ---
QObject::connect(tabWidget, &QTabWidget::tabCloseRequested, [tabWidget](int index) {
tabWidget->removeTab(index); // 真正移除页签
});

mainLayout->addWidget(tabWidget);
}

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget w;
w.setWindowTitle("QTabWidget 布局专家");
w.resize(400, 300);
setupTabWidgetDemo(&w);
w.show();
return a.exec();
}