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()会莫名其妙崩溃!;
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
