QT學(xué)記三:多界面跳轉(zhuǎn)
1.新建一個(gè)新界面
在Qt中,創(chuàng)建一個(gè)界面類的方式和設(shè)置
第一步:
右擊項(xiàng)目 ---- > new(創(chuàng)建文件),在彈出的對(duì)話框中,選擇Qt設(shè)計(jì)師界面類。Qt設(shè)計(jì)師界面類會(huì)包含.ui,.h兩個(gè)文件,而Qt Designer Form僅創(chuàng)建.ui文件,需在原有的.h文件上進(jìn)行修改才
能正常進(jìn)行。后者主要用于如果在創(chuàng)建項(xiàng)目過程中,未勾選生成.ui文件,可以通過后續(xù)的操作來增加。

第二步:選擇下一步,在彈出的對(duì)話框,選擇界面的模板

第三步:選擇下一步,設(shè)置界面類的名字

第四步:點(diǎn)擊下一步,完成 即可。adminwindow.cpp 進(jìn)行程序結(jié)構(gòu)設(shè)計(jì),adminwindow.ui是界面設(shè)計(jì)文件,adminwindow.h是頭文件。

2.界面跳轉(zhuǎn)的方式一
該方式是不保留上一個(gè)界面,直接釋放掉它,若是返回的話,是新建一個(gè)界面ui。

3.界面跳轉(zhuǎn)的方式二
該方式是保留上一個(gè)界面的內(nèi)存,當(dāng)點(diǎn)擊返回后,會(huì)返回該內(nèi)存中的界面,也就是跳轉(zhuǎn)到第二個(gè)界面時(shí),第一個(gè)界面是還在的,只是不顯示給你看。

4.界面設(shè)計(jì)
MainWindow的界面

AddMainWindow的界面

5.方式一的mainwindow程序設(shè)計(jì)


7.方式二的mainwindow程序設(shè)計(jì)


結(jié)果:
9.界面跳轉(zhuǎn)之?dāng)y帶數(shù)據(jù)跳轉(zhuǎn)
攜帶數(shù)據(jù)跳轉(zhuǎn),其實(shí)利用的是信號(hào)和槽來進(jìn)行數(shù)據(jù)的傳遞的。在信號(hào)中帶上形參,在槽函數(shù)中也帶上一樣的形參。如下:


10.MainWindow中進(jìn)行數(shù)據(jù)的攜帶跳轉(zhuǎn)

11.AddMainWindow界面接收字符串

結(jié)果:
https://www.bilibili.com/video/BV1Fq4y1r7zA?spm_id_from=333.999.0.0
代碼:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
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_TiaoZhuan_clicked();
signals:
? ?void sendData(QString data);
private:
? ?Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "addmainwindow.h"
MainWindow::MainWindow(QWidget *parent)
? ?: QMainWindow(parent)
? ?, ui(new Ui::MainWindow)
{
? ?ui->setupUi(this);
}
MainWindow::~MainWindow()
{
? ?delete ui;
}
void MainWindow::on_TiaoZhuan_clicked()
{
? AddMainWindow *aw = new AddMainWindow();
? connect(this,&MainWindow::sendData,aw,&AddMainWindow::getDataFromMainW);
? aw->show();
? emit sendData("hello world!AddMainWindow");
? this->close();
}
addmaindow.h
#ifndef ADDMAINWINDOW_H
#define ADDMAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class AddMainWindow;
}
class AddMainWindow : public QMainWindow
{
? ?Q_OBJECT
public:
? ?explicit AddMainWindow(QWidget *parent = nullptr);
? ?~AddMainWindow();
public slots:
? ?void getDataFromMainW(QString data);
private slots:
? ?void on_Return_clicked();
private:
? ?Ui::AddMainWindow *ui;
};
#endif // ADDMAINWINDOW_H
addmainwindow.cpp
#include "addmainwindow.h"
#include "ui_addmainwindow.h"
#include "mainwindow.h"
#include <QMessageBox>
AddMainWindow::AddMainWindow(QWidget *parent) :
? ?QMainWindow(parent),
? ?ui(new Ui::AddMainWindow)
{
? ?ui->setupUi(this);
}
AddMainWindow::~AddMainWindow()
{
? ?delete ui;
}
void AddMainWindow::getDataFromMainW(QString data)
{
? ?QMessageBox mes(this);
? ?mes.setText(data);
? ?mes.exec();
}
void AddMainWindow::on_Return_clicked()
{
? ?MainWindow *mw = new MainWindow();
? ?mw->show();
? ?this->close();
}
三連,走起來!^_^3333
