Qt5.8.0多界面切换

项目中会使用到很多界面,因此考虑到肯定会用,而自己之前也没有好好用过这一块,因此总结一下网上能找到的几种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.堆栈窗口实现方式

猜你喜欢

转载自blog.csdn.net/weixin_41108706/article/details/82185849
今日推荐