欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > QStackedWidget使用实例

QStackedWidget使用实例

2024/11/6 8:27:27 来源:https://blog.csdn.net/qq_38096989/article/details/143532796  浏览:    关键词:QStackedWidget使用实例

制作一个页面X,该页面X中有两个按钮a,b;和两个页面A,B。要求点击按钮a时,显示页面A。点击按钮b时,显示页面B。
要求按钮位于页面A或B的上方,并且依次由左向右间隔排列。
要求将页面A分为两个子页面A1和A2,将页面B分为两个子页面B1和B2。

可以通过简单的父子关系来实现页面A中的子页面A1和A2,以及页面B中的子页面B1和B2。我们将页面A和页面B分别用垂直布局包含子页面A1、A2和B1、B2。这样,A1、A2和B1、B2会直接显示在页面A和页面B中,而无需额外的点击切换。

以下是完整代码。

目录结构

project/
├── main.cpp
├── MainWindow.h
└── MainWindow.cpp

代码实现

MainWindow.h - 主窗口头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QStackedWidget>
#include <QWidget>class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);private:QPushButton *buttonA;            // 按钮a,用于显示页面AQPushButton *buttonB;            // 按钮b,用于显示页面BQStackedWidget *stackedWidget;   // 页面堆叠控件,用于管理页面A和页面BQWidget *pageA;                  // 页面AQWidget *pageB;                  // 页面BQWidget *subPageA1;              // 页面A的子页面A1QWidget *subPageA2;              // 页面A的子页面A2QWidget *subPageB1;              // 页面B的子页面B1QWidget *subPageB2;              // 页面B的子页面B2
};#endif // MAINWINDOW_H
MainWindow.cpp - 主窗口实现文件
#include "MainWindow.h"
#include <QVBoxLayout>
#include <QHBoxLayout>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {// 创建中央控件,用于承载所有的子控件QWidget *centralWidget = new QWidget(this);setCentralWidget(centralWidget);// 创建按钮 "a" 和 "b"buttonA = new QPushButton("Show Page A", this);buttonB = new QPushButton("Show Page B", this);// 创建页面A和页面BpageA = new QWidget(this);pageB = new QWidget(this);// 创建页面A的子页面A1和A2subPageA1 = new QWidget(pageA);subPageA2 = new QWidget(pageA);subPageA1->setStyleSheet("background-color: lightcyan;");subPageA2->setStyleSheet("background-color: lightcoral;");// 将子页面A1和A2添加到页面A的布局中QVBoxLayout *pageALayout = new QVBoxLayout(pageA);pageALayout->addWidget(subPageA1);pageALayout->addWidget(subPageA2);// 创建页面B的子页面B1和B2subPageB1 = new QWidget(pageB);subPageB2 = new QWidget(pageB);subPageB1->setStyleSheet("background-color: lightyellow;");subPageB2->setStyleSheet("background-color: lightpink;");// 将子页面B1和B2添加到页面B的布局中QVBoxLayout *pageBLayout = new QVBoxLayout(pageB);pageBLayout->addWidget(subPageB1);pageBLayout->addWidget(subPageB2);// 使用QStackedWidget来存放页面A和页面BstackedWidget = new QStackedWidget(this);stackedWidget->addWidget(pageA); // index 0stackedWidget->addWidget(pageB); // index 1// 创建一个水平布局用于放置按钮QHBoxLayout *buttonLayout = new QHBoxLayout();buttonLayout->addWidget(buttonA);buttonLayout->addWidget(buttonB);// 创建一个垂直布局用于整体布局QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);mainLayout->addLayout(buttonLayout);   // 将按钮布局添加到主布局的顶部mainLayout->addWidget(stackedWidget);  // 将页面堆叠控件添加到主布局的底部// 连接按钮和页面切换的槽函数connect(buttonA, &QPushButton::clicked, this, [=]() {stackedWidget->setCurrentIndex(0); // 显示页面A});connect(buttonB, &QPushButton::clicked, this, [=]() {stackedWidget->setCurrentIndex(1); // 显示页面B});
}
main.cpp - 主程序入口
#include <QApplication>
#include "MainWindow.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow mainWindow;mainWindow.setWindowTitle("Page Switcher with Subpages"); // 设置主窗口标题mainWindow.resize(400, 300);                              // 设置主窗口大小mainWindow.show();                                        // 显示主窗口return app.exec(); // 启动应用程序事件循环
}

代码说明

  • 子页面A1、A2和B1、B2:直接作为页面A和页面B的子控件,通过垂直布局加入各自的页面。
  • 布局与页面结构
    • QVBoxLayout *pageALayout:用于页面A的垂直布局,将subPageA1subPageA2加入。
    • QVBoxLayout *pageBLayout:用于页面B的垂直布局,将subPageB1subPageB2加入。

运行效果

  • 程序启动后显示主窗口,顶部有两个按钮“Show Page A”和“Show Page B”。
  • 点击“Show Page A”时显示页面A,包括两个子页面A1和A2,背景色分别为淡青色和淡珊瑚色。
  • 点击“Show Page B”时显示页面B,包括两个子页面B1和B2,背景色分别为淡黄色和淡粉色。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com