当前位置: 首页 > article >正文

Windows图形界面(GUI)-QT-C/C++ - Qt QToolBox详解教程

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

QToolBox基础概述

QToolBox简介

使用场景

QToolBox常见样式

选项卡式界面

页面内容

动态管理页面

QToolBox属性设置

添加和删除页面

页面标题

页面索引

QToolBox内容操作

添加页面

插入页面

删除页面

设置和获取页面标题

设置和获取当前页面

QToolBox示例代码

创建一个简单的 QToolBox

动态添加内容到页面

动态管理 QToolBox 页面

QToolBox综合示例

实现代码


QToolBox基础概述

QToolBox简介

QToolBox 是 Qt 提供的一个多页面控件容器,用于在一个窗口中组织和显示多个页面。

每个页面可以包含不同的控件和内容,用户通过点击选项卡切换页面,从而在有限的屏幕空间内高效展示多个功能或信息组。

使用场景

QToolBox 常用于以下场景:

  1. 分组功能展示:在一个窗口中展示多个功能模块,例如设置选项、工具面板等。
  2. 信息分区:将相关信息分组展示,用户可以按需切换查看。
  3. 节省屏幕空间:在有限的界面中组织多个页面,保持界面的整洁和有序。

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);

}


http://www.kler.cn/a/512157.html

相关文章:

  • 学习记录之原型,原型链
  • 【Leetcode 每日一题】2239. 找到最接近 0 的数字
  • React 中hooks之useReducer使用场景和方法总结
  • Spring的IoC、Bean、DI的简单实现,难度:※※※
  • 4.JoranConfigurator解析logbak.xml
  • MySQL表的增删改查(基础)CRUD
  • JSON全解析:语法、转换与FastJson应用指南
  • Linux(UOS系统:DHCP)
  • 数据库的DML
  • Kafka 日志存储 — 日志索引
  • IO模型与NIO基础二
  • 算法随笔_13: 有效三角形的个数
  • CSS 默认值
  • app测试笔记
  • 【Linux】Linux入门(一) 用户与用户组
  • AI发展困境:技术路径与实践约束的博弈
  • Linux TCP 之 RTT 采集与 RTO 计算
  • leetcode350-两个数组的交集II
  • 速通Docker === 网络
  • 进阶——第十六届蓝桥杯(sscanf的运用)
  • 云原生作业(四)
  • Hadoop美食推荐系统 爬虫1.8w+数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离
  • SQL Server Management Studio 表内数据查询与删除指令
  • 【Grasshopper】【Python】点集排序:带索引的Z字形排序算法
  • Vue实现点击复制文本内容(原生JS实现)
  • Java基础(3)