欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的基本相同,这里不做赘述。

看一下效果

Qt5.8.0多界面切换

Qt5.8.0多界面切换

Qt5.8.0多界面切换

可实现三个界面之前的转换操作。

方式2.堆栈窗口实现方式

相关标签: Qt