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

【QT】一个界面中嵌入其它界面(二)

以下是使用 QStackedWidget 实现动态切换界面的完整代码,包含详细的注释和实现步骤:


完整代码

1. 子界面类:Page1 和 Page2

首先创建两个简单的子界面类,用于嵌入到 QStackedWidget 中。

// Page1.h
#ifndef PAGE1_H
#define PAGE1_H#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>class Page1 : public QWidget {Q_OBJECT
public:explicit Page1(QWidget* parent = nullptr) : QWidget(parent) {QLabel* label = new QLabel("这是页面 1", this);label->setAlignment(Qt::AlignCenter);QVBoxLayout* layout = new QVBoxLayout(this);layout->addWidget(label);setLayout(layout);}
};#endif // PAGE1_H
// Page2.h
#ifndef PAGE2_H
#define PAGE2_H#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>class Page2 : public QWidget {Q_OBJECT
public:explicit Page2(QWidget* parent = nullptr) : QWidget(parent) {QLabel* label = new QLabel("这是页面 2", this);label->setAlignment(Qt::AlignCenter);QVBoxLayout* layout = new QVBoxLayout(this);layout->addWidget(label);setLayout(layout);}
};#endif // PAGE2_H

2. 主窗口类:MainWindow

实现主窗口,包含 QStackedWidget 和切换按钮。

// MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QStackedWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include "Page1.h"
#include "Page2.h"class MainWindow : public QMainWindow {Q_OBJECT
public:explicit MainWindow(QWidget* parent = nullptr);private:QStackedWidget* stackedWidget;
};#endif // MAINWINDOW_H
// MainWindow.cpp
#include "MainWindow.h"MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) {// 1. 创建 QStackedWidget 并添加子界面stackedWidget = new QStackedWidget(this);Page1* page1 = new Page1(stackedWidget);Page2* page2 = new Page2(stackedWidget);stackedWidget->addWidget(page1);  // 索引 0stackedWidget->addWidget(page2);  // 索引 1// 2. 创建切换按钮QPushButton* switchButton = new QPushButton("切换页面", this);connect(switchButton, &QPushButton::clicked, [=]() {// 计算下一个页面的索引(0 或 1)int nextIndex = (stackedWidget->currentIndex() + 1) % 2;stackedWidget->setCurrentIndex(nextIndex);});// 3. 布局管理QVBoxLayout* layout = new QVBoxLayout();layout->addWidget(switchButton);layout->addWidget(stackedWidget);QWidget* container = new QWidget(this);container->setLayout(layout);setCentralWidget(container);  // 将容器设置为主窗口的中央部件// 4. 窗口属性setWindowTitle("QStackedWidget 示例");resize(400, 300);
}

3. 主函数:main.cpp

启动应用程序并显示主窗口。

// main.cpp
#include <QApplication>
#include "MainWindow.h"int main(int argc, char* argv[]) {QApplication app(argc, argv);MainWindow window;window.show();return app.exec();
}

代码说明

关键步骤
  1. 创建子界面

    • Page1Page2 继承自 QWidget,并在构造函数中设置布局和控件(例如 QLabel)。
  2. QStackedWidget 管理子界面

    • 使用 addWidget() 将子界面添加到 QStackedWidget 中,每个子界面的索引从 0 开始递增。
    • 通过 setCurrentIndex() 切换当前显示的界面。
  3. 切换按钮逻辑

    • 点击按钮时,计算下一个页面的索引(currentIndex() + 1)% 总数),实现循环切换。
  4. 布局管理

    • 使用 QVBoxLayout 将按钮和 QStackedWidget 垂直排列。
    • 将布局设置到 QWidget 容器中,再将容器设置为主窗口的中央部件。

运行效果

  1. 窗口初始显示 Page1,内容为 “这是页面 1”。
  2. 点击按钮后切换到 Page2,内容为 “这是页面 2”。
  3. 再次点击按钮回到 Page1

扩展功能

  • 添加更多页面:只需创建新的子界面类,并调用 stackedWidget->addWidget(newPage)
  • 自定义切换动画:使用 QPropertyAnimation 实现淡入淡出或滑动效果。
  • 通过菜单切换:将按钮替换为 QMenuQToolBar 的菜单项。

此代码可直接复制到 Qt 项目中编译运行,确保在 .pro 文件中添加 QT += widgets

http://www.xdnf.cn/news/7245.html

相关文章:

  • 星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态
  • 线程池模式与C#中用法
  • 解决服务器重装之后vscode Remote-SSH无法连接的问题
  • Vue百日学习计划Day33-35天详细计划-Gemini版
  • 基于tar包安装,创建两个tomcat实例
  • CLIP:论文阅读 -- 视觉模型
  • 【MySQL成神之路】MySQL常用语法总结
  • Django 项目中,将所有数据表注册到 Django 后台管理系统
  • 从纸质契约到智能契约:AI如何改写信任规则与商业效率?​——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命
  • Ubuntu 20.04 postgresql
  • 通用简洁工作汇报项目评估营销策划工作总结年终汇报PPT模版8套一组分享
  • 什么是子网委派?
  • 一文了解VR拍摄制作
  • 数据库性能调优:索引设计、缓存配置与查询计划优化
  • 《告别低效签约!智合同如何用AI重构商业“契约时代”》​​——解析智能合约技术的爆发与行业变革
  • 企业智慧业务中台规划建设与应用全景解析
  • upload-labs靶场通关详解:第11关
  • UCOS 嵌入式操作系统
  • BGP传播规则
  • 1.5 MouseDown,MouseUp,LostMouseCapture的先后顺序
  • windows 安装gdal实现png转tif,以及栅格拼接
  • 内容社区系统开发文档(下)
  • ollama调用千问2.5-vl视频图片UI界面小程序分享
  • 数据库中的锁机制
  • 电子数据取证(数字取证)技术全面指南:从基础到实践
  • c++线段树之单点修改区间最大子段和-----P4513 小白逛公园
  • 仿腾讯会议——房间界面用户设置
  • SRIO(Serial RapidIO)握手流程
  • 校园网--tarjan求缩点的两个经典问题
  • 《Python星球日记》 第90天:微调的概念以及如何微调大模型?