目录
Qt界面交互的时候,经常用会用到2个界面的交换;
有如下要求:
有主界面A,子界面B,分别有一个按钮,当点击按钮的时候,就会切换到另一个界面
顺序如下: A--->B-->A
要求效果,默认只显示一个界面,就是主界面A先显示,点击A上的按钮之后,显示B界面,A界面隐藏,再点击B界面的按钮,显示A界面,B界面隐藏。
分析:
可以考虑使用信号槽的方式进行通信,A上有2个槽,
一个槽负责: A-->B
另一个槽负责: B-->A
A上还得有2个对象:this,还得有一个B的指针对象
那么B对象只需要有一个信号,当点击按钮的时候,发射信号,通知A上的槽执行功能即可。
核心代码如下:
A的头文件: a.h
#ifndef A_H
#define A_H
#include <QMainWindow>
#include "b.h"
namespace Ui {
class A;
}
class A : public QMainWindow
{
Q_OBJECT
public:
explicit A(QWidget *parent = 0);
~A();
private slots:
void on_pushButton_clicked();
void showAHideB();
private:
Ui::A *ui;
B *m_b;
};
#endif // A_H
A的源文件:a.cpp
#include "a.h"
#include "ui_a.h"
A::A(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::A)
{
ui->setupUi(this);
m_b = new B(this); // 初始化m_b
connect(m_b,SIGNAL(bSignal()),this,SLOT(showAHideB())); // 关联信号槽
}
A::~A()
{
delete ui;
}
void A::on_pushButton_clicked()
{
this->hide(); // A隐藏
m_b->show(); // B显示
}
void A::showAHideB()
{
this->show(); // A显示
m_b->hide(); // B隐藏
}
B的头文件: b.h
#ifndef B_H
#define B_H
#include <QMainWindow>
namespace Ui {
class B;
}
class B : public QMainWindow
{
Q_OBJECT
public:
explicit B(QWidget *parent = 0);
~B();
signals:
void bSignal(); // 自定义信号
private slots:
void on_pushButton_clicked();
private:
Ui::B *ui;
};
#endif // B_H
B的源文件:b.cpp
#include "b.h"
#include "ui_b.h"
B::B(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::B)
{
ui->setupUi(this);
}
B::~B()
{
delete ui;
}
void B::on_pushButton_clicked()
{
emit bSignal();
}
切换效果如下:
源码下载地址:
https://download.csdn.net/download/mars1199/88528286
.