QT实现2个界面相互跳转(2个QMainWindow类型的窗口)

a实验环境:2个QMainWindow类型的窗口A和B:

1.先创建A类继承QMainWindow;

2.再创建B类同样继承QMainWindow;

代码如下:

#a.h

#ifndef A_H
#define A_H#include 
#include "b.h"
QT_BEGIN_NAMESPACE
namespace Ui { class A; }
QT_END_NAMESPACEclass A : public QMainWindow
{Q_OBJECTpublic:A(QWidget *parent = nullptr);~A();private slots:void on_pushButton_clicked();private:Ui::A *ui;B *b;
};
#endif // A_H

#a.cpp

#include "a.h"
#include "ui_a.h"A::A(QWidget *parent): QMainWindow(parent), ui(new Ui::A)
{ui->setupUi(this);b=new B(this);}A::~A()
{delete ui;
}void A::on_pushButton_clicked()
{setHidden(true);b->show();
}

a.ui :拖一个Lable 写上'a',拖一个PushButton写上‘跳转B’;

#b.h

#ifndef B_H
#define B_H#include class A;namespace Ui {
class B;
}class B : public QMainWindow
{Q_OBJECTpublic:explicit B(QWidget *parent = nullptr);~B();private slots:void on_pushButton_clicked();private:Ui::B *ui;A *a;
};#endif // B_H

#b.cpp

#include "b.h"
#include "ui_b.h"#include "a.h"B::B(QWidget *parent) :QMainWindow(parent),ui(new Ui::B)
{ui->setupUi(this);a=dynamic_cast(this->parent());
}B::~B()
{delete ui;
}void B::on_pushButton_clicked()
{a->show();this->close();}

#b.ui :拖一个Lable 写上'b',拖一个PushButton写上‘跳转A’;

#main.cpp  (这个不用动)

#include "a.h"#include int main(int argc, char *argv[])
{QApplication a(argc, argv);A w;w.show();return a.exec();
}

自由跳转不卡死!

1.关键在创建B对象时一定要传入“this”,让A和B二者之间建立父子关系!!!

2.互相之间不可相互包含!所以,头文件只能包含一次(A包含B),另一个采用前置(即在B的头文件中只是声明class A,而不直接包含A的头文件),但是在cpp中还是需要包含A的头文件。

3.

 setHidden(true);有先后顺序,不然跳转的时候会黑屏;

4.

 这里要用this->close(); 而deleteLater()会莫名其妙崩溃!;

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部