QT5:多窗口跳转

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助

目录

前言

一、环境

二、步骤

三、代码实现

四、效果图


前言

学习使用qt5完成多窗口(界面)跳转:从主界面可分别跳转至界面一和界面二,从界面一可以返回主界面和跳转至界面二,界面二可返回对应的父界面(从主界面跳转则返回主界面,从界面一跳转则返回界面一)。


一、环境

qt版本:5.12.7

windows 11 下的 Qt Designer (已搭建)

编译器:MingGW


二、步骤

1.在Designer 创建一个新的qt工程

2.选中工程选择Add New.. 添加两个新的ui界面page1window和page2window,界面模板使用MainWindow。


 3.在主界面创建两个button分别跳转至界面一和界面二。

4.在界面一创建两个button分别跳转至界面二和返回主界面。

5.在界面三创建一个button用于返回其父界面。

6.连接槽函数。


三、代码实现

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QHBoxLayout>#include "page1window.h"
#include "page2window.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_page1_button_clicked();void on_page2_button_clicked();private:Ui::MainWindow *ui;Page1Window *page1=NULL;Page2Window *page2=NULL;QPushButton *page1_button=NULL;QPushButton *page2_button=NULL;QHBoxLayout *btn_hlayout; //水平布局};
#endif // MAINWINDOW_H

 mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QWidget *widget=new QWidget(this);this->setCentralWidget(widget); // 设置为中心部件btn_hlayout = new QHBoxLayout(widget);page1=new Page1Window(this);page1_button =new QPushButton("前往页面一");page2_button =new QPushButton("前往页面二");btn_hlayout->addWidget(page1_button);btn_hlayout->addWidget(page2_button);// 跳转到子窗口connect(page1_button, &QPushButton::clicked, this, &MainWindow::on_page1_button_clicked);//接收返回信号显示当前窗口connect(page1,&Page1Window::goback,this,[=](){page1->close();this->show();});Page2Window *Page2FrommMin = new class Page2FromMain(this); // 使用匿名内部类connect(page2_button, &QPushButton::clicked, this, [=]() {Page2FrommMin->show();this->hide();});}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_page1_button_clicked()
{this->hide();page1->show();
}void MainWindow::on_page2_button_clicked()
{this->hide();page2->show();
}

 pgge1window.h:

#ifndef PAGE1WINDOW_H
#define PAGE1WINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QHBoxLayout>namespace Ui {
class Page1Window;
}class Page1Window : public QMainWindow
{Q_OBJECTpublic:explicit Page1Window(QWidget *parent = nullptr);~Page1Window();signals:void goback();private slots:void on_return_btn_clicked();private:Ui::Page1Window *ui;QPushButton *return_button=NULL;QPushButton *page2_button=NULL;QHBoxLayout *btn_hlayout; //水平布局
};#endif // PAGE1WINDOW_H

pgge1window.cpp:

#include "page1window.h"
#include "ui_page1window.h"
#include "page2window.h"Page1Window::Page1Window(QWidget *parent) :QMainWindow(parent),ui(new Ui::Page1Window)
{ui->setupUi(this);QWidget *widget=new QWidget(this);this->setCentralWidget(widget); // 设置为中心部件btn_hlayout = new QHBoxLayout(widget);return_button =new QPushButton("返回主页面");page2_button =new QPushButton("前往页面二");btn_hlayout->addWidget(return_button);btn_hlayout->addWidget(page2_button);connect(return_button, &QPushButton::clicked, this, &Page1Window::on_return_btn_clicked);Page2Window *Page2FrommPage1 = new class Page2FromPage1(this); // 使用匿名内部类connect(page2_button, &QPushButton::clicked, this, [=]() {Page2FrommPage1->show();this->hide();});
}Page1Window::~Page1Window()
{delete ui;
}void Page1Window::on_return_btn_clicked()
{emit goback();
}

 pgge2window.h: 

#ifndef PAGE2WINDOW_H
#define PAGE2WINDOW_H#include <QMainWindow>#include <QPushButton>
#include <QHBoxLayout>namespace Ui {
class Page2Window;
}class Page2Window : public QMainWindow
{Q_OBJECTpublic:explicit Page2Window(QWidget *parent = nullptr);~Page2Window();virtual void on_return_btn_clicked() = 0; // 纯虚函数,需要在子类中实现private:Ui::Page2Window *ui;QWidget *Widget;QPushButton *return_button;QHBoxLayout *btn_hlayout; //水平布局};//页面二(从主页面跳转)
class Page2FromMain : public Page2Window {QWidget *parentWindow1;
public:Page2FromMain(QWidget *parent = nullptr) : Page2Window(parent), parentWindow1(parent) {}void on_return_btn_clicked() override {parentWindow1->show();this->hide();}
};//页面二(从页面一跳转)
class Page2FromPage1 : public Page2Window {QWidget *parentWindow2;
public:Page2FromPage1(QWidget *parent = nullptr) : Page2Window(parent), parentWindow2(parent) {}void on_return_btn_clicked() override {parentWindow2->show();this->hide();}
};#endif // PAGE2WINDOW_H

  pgge2window.cpp: 

#include "page2window.h"
#include "ui_page2window.h"Page2Window::Page2Window(QWidget *parent) :QMainWindow(parent),ui(new Ui::Page2Window)
{ui->setupUi(this);QWidget *widget=new QWidget(this);this->setCentralWidget(widget); // 设置为中心部件btn_hlayout = new QHBoxLayout(widget);return_button =new QPushButton("返回父页面");btn_hlayout->addWidget(return_button);connect(return_button, &QPushButton::clicked, this, &Page2Window::on_return_btn_clicked);}Page2Window::~Page2Window()
{delete ui;
}

四、效果图

 


 总结

通过qt5实现了多页面之间的跳转,在此过程中使用了虚函数(c语言没有),看来学习的任务依旧任重而道远。另外,使用此方式进行界面跳转时Page2Window的基类貌似只能使用MainWindow而不能是widget。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot集成SFTP快速入门Demo

1.什么是SFTP&#xff1f; SFTP&#xff08;SSH File Transfer Protocol&#xff0c;也称 Secret File Transfer Protocol&#xff09;&#xff0c;是一种基于SSH&#xff08;安全外壳&#xff09;的安全的文件传输协议。使用SFTP协议可以在文件传输过程中提供一种安全的加密算…

主从复制 哨兵服务 数据类型 持久化

配置主从复制 一主多从结构 配置一主一从结构 修改配置文件 配置salve服务器 配置带验证的主从复制 查看密码&#xff0c;默认redis服务没有密码 192.168.88.61:6379> config get requirepass 设置密码 192.168.88.61:6379> config set requirepass 123456 输入密码…

Spring Boot2(Spring Boot 的Web开发 springMVC 请求处理 参数绑定 常用注解 数据传递)

目录 一、Spring Boot 的Web开发 1. 静态资源映射规则 2. enjoy模板引擎 二、springMVC 1. springMVC-请求处理 测试&#xff1a; 以post方式请求 限制请求携带的参数 GetMapping 查询 PostMapping 新增 DeleteMapping删除 PutMapping 修改 2. springMVC-参…

HarmonyOS鸿蒙- 跳转系统应用能力

一、通过弹窗点击设置跳转系统应用能力 1、 自定义弹窗效果图 2、 自定义弹窗代码 import { common, Want } from kit.AbilityKit; import { BusinessError } from kit.BasicServicesKit;export function alertDialog() {AlertDialog.show({title: ,message: 当前功能依赖定位…

ranger审计日志对接CDH solr

作者&#xff1a;耀灵 一、准备条件 1、已安装完毕ranger-admin 2、已在CDH上部署solr&#xff08;注意在安装solr时更改下solr在zk上的节点信息&#xff09; 二、更改相关配置 1、修改ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties SOLR_USERsolr …

音视频环境搭建

整体流程参考&#xff1a; Windows 10开发环境搭建 这里记录一下期间的遇到的问题&#xff1a; 下载的ffmpeg&#xff0c;将ffmpeg的bin目录添加到系统环境变量&#xff0c;然后将SDL的dll动态库拷贝到ffmpeg的bin目录下或将其所在的目录也添加到环境变量&#xff0c;不一定非要…

huawei USG6001v1学习---防火墙相关知识(2)

目录 1.安全策略 2.防火墙的状态检测和会话表技术 3.FTP 4.用户认证 5.认证策略 1.安全策略 传统包过滤技术 --- 其本质就是ACL访问控制列表&#xff0c;根据数据包的特征进行过滤&#xff0c;对比规则&#xff0c; 执行对应的动作&#xff1b; 这里数据包的特征 --- …

题解|2024暑期杭电多校01

【原文链接】 1001.循环位移 字符串 题目大意 给定两个字符串 A , B A,B A,B 。 定义 [ A ] [A] [A] 为字符串 A A A 的循环位移任意次可以得到的所有字符串的集合。 求 B B B 包含 [ A ] [A] [A] 中元素的个数。 解题思路 利用字符串Hash快速匹配。 将 [ A ] [A] …

switch可应用于哪些数据类型说说java中的数组和多维数组

switch可以用于哪些数据类型&#xff1f; switch是一种条件控制语句&#xff0c;根据不同的条件执行不同的代码块。switch使用一个或者多个不同的值来匹配某个表达式的值&#xff0c;并且根据结果来匹配不同的值。switch的语句基本格式 switch&#xff08;expression&#xf…

Web安全:未验证的重定向和转发.

Web安全&#xff1a;未验证的重定向和转发. 未验证的重定向和转发漏洞是一种常见的Web安全漏洞&#xff0c;它允许攻击者将用户重定向到一个恶意的URL&#xff0c;而不是预期的安全URL。这种漏洞通常发生在应用程序处理重定向和转发请求时&#xff0c;未能对目标URL进行适当的…

探索 PDF 转 Markdown 的项目:MinerU 和 pdfParser

pdfParser 项目是在MinerU 项目 的基础上开发的&#xff0c;增加了表格识别功能 MinerU&#xff1a;综合数据提取工具 MinerU 项目 是一款一站式、开源、高质量的数据提取工具&#xff0c;支持 PDF、网页和电子书的提取。其 Magic-PDF 模块可以将 PDF 转换为 Markdown 格式&a…

display: flex 和 justify-content: center 强大居中

你还在为居中而烦恼吗&#xff0c;水平居中多个元素、创建响应式布局、垂直和水平同时居中内容。它&#xff0c;display: flex 和 justify-content: center 都可以完成&#xff01; display: flex&#xff1a;将元素定义为flex容器 justify-content&#xff1a;定义项目在主轴…

el-popover嵌套select弹窗点击实现自定义关闭

需求 el-popover弹窗内嵌套下拉选择框&#xff0c;点击el-popover弹出外部区域需关闭弹窗&#xff0c;点击查询、重置需关闭弹窗&#xff0c; 实现 根据需求要自定义弹窗的关闭和显示&#xff0c;首先想到的是visible属性&#xff0c;在实现过程中经过反复的测验&#xff0…

区块链技术实现数字电网内数据可信共享 |《超话区块链》直播预告

随着全球电力市场朝着构建“SmartGrid”和“IntelliGrid”的目标发展&#xff0c;国内电力公司也提出了构建“数字电网”的愿景。清大科越推出新型电力系统区块链服务平台&#xff0c;通过便捷的建链、上链、用链及治链能力&#xff0c;有效解决数字电网各主体间数据共享的信任…

为什么要从C语言开始编程

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;很多小伙伴在入门编程时。都…

docker的学习(一):docker的基本概念和命令

简介 docker的学习&#xff0c;基本概念&#xff0c;以及镜像命令和容器命令的使用 docker docker的基本概念 一次镜像&#xff0c;处处运行。 在部署程序的过程中&#xff0c;往往是很繁琐的&#xff0c;要保证运行的环境&#xff0c;软件的版本&#xff0c;配置文件&…

机器学习中的数据分析

数据分析是一个涉及收集、清洗、转换、建模和解释数据的过程&#xff0c;目的是揭示模式、趋势和结论&#xff0c;以支持决策制定。以下是一个简化版的数据分析教程&#xff0c;分为几个关键步骤&#xff1a; 1. 定义问题 明确你希望通过数据分析解决的问题。这可能涉及到商业…

安装 Maven

安装 Maven 的步骤&#xff1a; 1. 访问 Maven 官方网站: https://maven.apache.org/download.cgi 2. 下载 Maven 的二进制文件 3. 解压下载的文件到希望安装的目录 4. 将 Maven 的 bin 目录添加到您的系统环境变量 PATH 中&#xff08;配置环境变量&#xff09; 这个步骤可…

Jupyter notebook如何快速的插入一张图片?如何控制插入图片的缩放、靠左展示(ChatGPT)

在Jupyter Notebook中&#xff0c;你可以使用Markdown语法快速插入图片&#xff0c;并且可以通过HTML标签来控制图片的展示方式和缩放。 注意&#xff1a;以下所有操作都有一个前提&#xff0c;即选择Cell-CellType-Markdown 1. 快速插入图片 要在Jupyter Notebook中插入图…

澎湃算力 玩转AI 华为昇腾AI开发板——香橙派OriengePi AiPro边缘计算案例评测

澎湃算力 玩转AI 华为昇腾AI开发板 香橙派OriengePi AiPro 边缘计算案例评测 人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。作为推动这一变革的关键力量&#xff0c;边缘计算与AI技术的深度融合正成为行业发展的新趋势…