自学内容网 自学内容网

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

}


原文地址:https://blog.csdn.net/2301_80612536/article/details/145241646

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!