Qt QTabWidget 总结
1. 基本概念
- 用途:管理多个标签页,每个页可包含独立内容,用户通过点击标签切换页面。
- 组成:
- 标签栏(QTabBar):显示标签标题、图标,支持交互(点击、关闭按钮等)。
- 页面区域:显示当前选中标签页的内容。
2. 基础用法
#include <QTabWidget>
#include <QLabel>QTabWidget *tabWidget = new QTabWidget;
QWidget *page1 = new QWidget;
QWidget *page2 = new QWidget;
tabWidget->addTab(page1, "Tab 1");
tabWidget->addTab(page2, QIcon("icon.png"), "Tab 2");
tabWidget->setTabToolTip(0, "First Tab");
3. 常用属性设置
- 标签位置:
setTabPosition(QTabWidget::North | South | West | East)
tabWidget->setTabPosition(QTabWidget::South);
- 关闭按钮:
setTabsClosable(true)
tabWidget->setTabsClosable(true);
- 可移动标签:通过QTabBar设置
tabWidget->tabBar()->setMovable(true);
4. 信号与槽
- 切换标签:
currentChanged(int index)
connect(tabWidget, &QTabWidget::currentChanged, [](int index){qDebug() << "当前标签页索引:" << index;
});
- 关闭请求:
tabCloseRequested(int index)
connect(tabWidget, &QTabWidget::tabCloseRequested, [&](int index){tabWidget->removeTab(index);
});
5. 动态操作标签页
6. 样式定制(QSS)
tabWidget->setStyleSheet("QTabWidget::pane { border: 1px solid gray; }""QTabBar::tab { background: lightgray; padding: 8px; }""QTabBar::tab:selected { background: white; }"
);
7. 注意事项
- 内存管理:默认情况下,QTabWidget不会自动删除移除的页面,需手动调用
delete
。 - 页面内容:每个标签页应为独立的QWidget,避免控件重复添加到多个页面。
- 标签数量限制:标签过多时可能显示不全,需结合
QTabBar::setUsesScrollButtons(true)
启用滚动按钮。
8. 完整示例
QTabWidget *tabWidget = new QTabWidget;
tabWidget->addTab(new QLabel("Page 1 Content"), "Tab 1");
tabWidget->addTab(new QLabel("Page 2 Content"), "Tab 2");
tabWidget->setTabPosition(QTabWidget::North);
tabWidget->setTabsClosable(true);connect(tabWidget, &QTabWidget::tabCloseRequested, [&](int index){QWidget *page = tabWidget->widget(index);tabWidget->removeTab(index);delete page;
});
9. 高级功能
- 自定义标签:继承QTabWidget,重写事件或使用代理样式。
- 动画效果:通过QPropertyAnimation实现切换动画(需手动实现)。