QToolBox
是 Qt 框架中的一个控件,用于创建一个可折叠的“工具箱”界面(类似 Windows 资源管理器的侧边栏)。每个子项可以展开或折叠,适合用于分组显示多个功能模块。以下是其基本用法和示例:
1. 基本用法
创建并添加子项
#include <QToolBox>
#include <QLabel>
#include <QPushButton>// 创建 QToolBox 对象
QToolBox *toolBox = new QToolBox(parent);// 添加子项(页面)
QWidget *page1 = new QWidget;
QLabel *label1 = new QLabel("Page 1 Content");
QPushButton *button1 = new QPushButton("Button 1");// 将控件添加到 page1 的布局中
QVBoxLayout *layout1 = new QVBoxLayout(page1);
layout1->addWidget(label1);
layout1->addWidget(button1);// 将 page1 添加到 toolBox 并设置标题
toolBox->addItem(page1, "Page 1");// 添加第二个页面
QWidget *page2 = new QWidget;
QLabel *label2 = new QLabel("Page 2 Content");
QVBoxLayout *layout2 = new QVBoxLayout(page2);
layout2->addWidget(label2);
toolBox->addItem(page2, "Page 2");
2. 关键功能
切换当前页面
// 切换到索引为 1 的页面(从 0 开始)
toolBox->setCurrentIndex(1);
获取当前页面索引
int currentIndex = toolBox->currentIndex();
响应页面切换事件
// 连接信号槽:当页面切换时触发
connect(toolBox, &QToolBox::currentChanged, [](int index) {qDebug() << "当前页面索引:" << index;
});
3. 样式定制
通过 Qt 样式表可以美化 QToolBox
:
toolBox->setStyleSheet("QToolBox::item {"" background: #f0f0f0;"" border: 1px solid #ccc;"" padding: 5px;""}""QToolBox::item:selected {"" background: #e0e0e0;""}"
);
4. 动态增删页面
插入页面
QWidget *newPage = new QWidget;
toolBox->insertItem(1, newPage, "New Page");
移除页面
// 移除索引为 1 的页面
toolBox->removeItem(1);
5. 完整示例
#include <QApplication>
#include <QToolBox>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *mainLayout = new QVBoxLayout(&window);QToolBox *toolBox = new QToolBox;// 添加页面 1QWidget *page1 = new QWidget;QLabel *label1 = new QLabel("This is Page 1");QPushButton *btn1 = new QPushButton("Click Me");QVBoxLayout *layout1 = new QVBoxLayout(page1);layout1->addWidget(label1);layout1->addWidget(btn1);toolBox->addItem(page1, "Page 1");// 添加页面 2QWidget *page2 = new QWidget;QLabel *label2 = new QLabel("This is Page 2");QVBoxLayout *layout2 = new QVBoxLayout(page2);layout2->addWidget(label2);toolBox->addItem(page2, "Page 2");mainLayout->addWidget(toolBox);window.show();return app.exec();
}
注意事项
- 布局管理:每个页面的内容需要单独设置布局(如
QVBoxLayout
),否则控件可能无法正确显示。 - 内存管理:删除
QToolBox
时会自动删除其所有子页面。 - 信号扩展:除了
currentChanged
,还可以监听其他信号如itemInserted(int index)
或itemRemoved(int index)
。