Windows图形界面(GUI)-QT-C/C++ - Qt QToolBox详解教程
- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
QToolBox基础概述
QToolBox简介
QToolBox
是 Qt 提供的一个多页面控件容器,用于在一个窗口中组织和显示多个页面。
每个页面可以包含不同的控件和内容,用户通过点击选项卡切换页面,从而在有限的屏幕空间内高效展示多个功能或信息组。
使用场景
QToolBox
常用于以下场景:
- 分组功能展示:在一个窗口中展示多个功能模块,例如设置选项、工具面板等。
- 信息分区:将相关信息分组展示,用户可以按需切换查看。
- 节省屏幕空间:在有限的界面中组织多个页面,保持界面的整洁和有序。
QToolBox常见样式
选项卡式界面
QToolBox
提供一个选项卡式的界面,每个选项卡代表一个页面。- 用户可以通过点击选项卡标题切换不同页面。
页面内容
- 每个页面可以容纳不同的控件和内容,例如按钮、表格、文本框等。
- 页面内容可以动态添加或修改。
动态管理页面
- 可以动态添加、删除或修改页面及其标题。
- 支持设置当前显示的页面。
QToolBox属性设置
添加和删除页面
添加页面
toolbox->addItem(new QWidget(), "Page 1");
删除页面
toolbox->removeItem(0);
页面标题
设置页面标题
toolbox->setItemText(0, "New Title");
获取页面标题
QString title = toolbox->itemText(0);
页面索引
获取当前页面索引
int currentIndex = toolbox->currentIndex();
设置当前页面索引
toolbox->setCurrentIndex(1);
QToolBox内容操作
添加页面
addItem
方法用于向 QToolBox
添加新页面。
QWidget *page1 = new QWidget();
toolbox->addItem(page1, "Page 1");
插入页面
insertItem
方法用于在指定位置插入一个页面。
QWidget *page2 = new QWidget();
toolbox->insertItem(1, page2, "Page 2");
删除页面
removeItem
方法用于删除指定位置的页面。
toolbox->removeItem(0); // 删除索引为 0 的页面
设置和获取页面标题
toolbox->setItemText(0, "New Title"); // 设置标题
QString title = toolbox->itemText(0); // 获取标题
设置和获取当前页面
toolbox->setCurrentIndex(1); // 切换到索引为 1 的页面
int index = toolbox->currentIndex(); // 获取当前页面索引
QToolBox示例代码
创建一个简单的 QToolBox
QToolBox *toolbox = new QToolBox(this);
// 添加页面1
QWidget *page1 = new QWidget();
QVBoxLayout *layout1 = new QVBoxLayout(page1);
layout1->addWidget(new QLabel("This is Page 1"));
toolbox->addItem(page1, "Page 1");
// 添加页面2
QWidget *page2 = new QWidget();
QVBoxLayout *layout2 = new QVBoxLayout(page2);
layout2->addWidget(new QLabel("This is Page 2"));
toolbox->addItem(page2, "Page 2");
// 设置布局
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(toolbox);
动态添加内容到页面
void MainWindow::addItemToPage(QListWidget *listWidget)
{
// 弹出输入框让用户输入内容
bool ok;
QString text = QInputDialog::getText(this, "Add Item", "Enter item name:", QLineEdit::Normal, "", &ok);
if (ok && !text.isEmpty()) {
// 添加到列表
listWidget->addItem(new QListWidgetItem(QIcon(":/icons/icon.png"), text));
}
}
connect(ui->addButton, &QPushButton::clicked, this, [this]() {
addItemToPage(ui->listWidget);
});
动态管理 QToolBox 页面
void MainWindow::addPageToToolBox()
{
QWidget *newPage = new QWidget();
QVBoxLayout *layout = new QVBoxLayout(newPage);
layout->addWidget(new QLabel("New Page Content"));
ui->toolBox->addItem(newPage, "New Page");
}
void MainWindow::removeCurrentPage()
{
int currentIndex = ui->toolBox->currentIndex();
if (currentIndex != -1) {
ui->toolBox->removeItem(currentIndex);
}
}
connect(ui->addPageButton, &QPushButton::clicked, this, &MainWindow::addPageToToolBox);
connect(ui->removePageButton, &QPushButton::clicked, this, &MainWindow::removeCurrentPage);
QToolBox综合示例
实现代码
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建工具箱
QToolBox *toolBox = new QToolBox(this);
toolBox->move(300, 300);
toolBox->resize(500, 300);
// 添加初始页面
QWidget *page1 = new QWidget();
QVBoxLayout *layout1 = new QVBoxLayout(page1);
layout1->addWidget(new QLabel("This is the first page."));
toolBox->addItem(page1, "Page 1");
// 添加页面管理按钮
QPushButton *addPageButton = new QPushButton("Add Page", this);
addPageButton->move(0, 10);
QPushButton *removePageButton = new QPushButton("Remove Page", this);
removePageButton->move(0,50);
connect(addPageButton, &QPushButton::clicked, this, [=]() {
QWidget *newPage = new QWidget();
QVBoxLayout *layout = new QVBoxLayout(newPage);
layout->addWidget(new QLabel("New Page Content"));
toolBox->addItem(newPage, QString("Page %1").arg(toolBox->count() + 1));
});
connect(removePageButton, &QPushButton::clicked, this, [=]() {
int currentIndex = toolBox->currentIndex();
if (currentIndex != -1) {
toolBox->removeItem(currentIndex);
}
});
// 主布局
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(toolBox);
mainLayout->addWidget(addPageButton);
mainLayout->addWidget(removePageButton);
}
原文地址:https://blog.csdn.net/2301_80612536/article/details/145241646
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!