Qt5.8.0多界面切换
程序员文章站
2022-03-10 21:49:14
...
项目中会使用到很多界面,因此考虑到肯定会用,而自己之前也没有好好用过这一块,因此总结一下网上能找到的几种Qt多个界面的方式用来学习,记录。
如果用fcitx无法在qt中输入中文的话,可参考这个https://blog.csdn.net/linux_2016/article/details/52356576
方式1.widget与dialog界面的切换
方式2.堆栈窗口stackedWidget
方式1:
参考https://blog.csdn.net/wc7620awjh/article/details/8574131
widget与dialog界面的切换较为简单,甚至不需要使用信号与槽的机制就可以实现实现,首先放上主要的代码
this->close();
dialog.show();
dialog.exec();
this->show();
这里的话,this指代的是MainWindow,在执行on_pushButton_clicked()函数的时候,首先关闭MainWindow,然后显示dialog,dialog.exec()的意思是等待消息循环,如果dialog关闭就会接着执行this->show,因此实现了不同界面的切换
下面放上代码
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "dialog1.h"
#include "dialog2.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Dialog1 dialog1;
Dialog2 dialog2;
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
};
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
this->hide();
dialog1.show();
dialog1.showMaximized();
//等待消息循环
dialog1.exec();
this->show();
this->move(200, 200);
}
void MainWindow::on_pushButton_2_clicked()
{
this->close();
}
void MainWindow::on_pushButton_3_clicked()
{
this->hide();
dialog2.show();
dialog2.showMaximized();
dialog2.exec();
this->show();
this->move(200, 200);
}
dialog1.h
#ifndef DIALOG1_H
#define DIALOG1_H
#include <QDialog>
namespace Ui {
class Dialog1;
}
class Dialog1 : public QDialog
{
Q_OBJECT
public:
explicit Dialog1(QWidget *parent = 0);
~Dialog1();
private:
Ui::Dialog1 *ui;
private slots:
void on_pushButton_clicked();
};
#endif // DIALOG1_H
dialog1.cpp
#include "dialog1.h"
#include "ui_dialog1.h"
Dialog1::Dialog1(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog1)
{
ui->setupUi(this);
}
Dialog1::~Dialog1()
{
delete ui;
}
void Dialog1::on_pushButton_clicked()
{
this->close();
}
dialog2.h dialog2.cpp的代码与dialog1的基本相同,这里不做赘述。
看一下效果
可实现三个界面之前的转换操作。
方式2.堆栈窗口实现方式
上一篇: QT5 treewidget::clear()时出错
下一篇: QTday2