赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助
学习使用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_NAMESPACE
-
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- 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_OBJECT
-
- public:
- 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_OBJECT
-
- public:
- 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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。