主窗口与子窗口之间的传值
主窗口传信息给子窗口
方法一:委托
主窗口与子窗口创建委托关系,即是把主窗口的地址给到子窗口,这样子窗口就可以通过地址访问到主窗口的公有成员函数,从而得到私有成员的值。示例步骤如下:(示例中MainWindow类为主窗口,pretreat类为子窗口)
- 子窗口
pretreat.h
#include "MainWindow.h"
class pretreat : public QDialog
{
public:
explicit pretreat(MainWindow *AA,QWidget *parent = nullptr);
private:
Ui::pretreat *pui;
MainWindow *A; //委托
}
pretreat.cpp
pretreat::pretreat(MainWindow *AA, QWidget *parent) :
QDialog(parent), A(AA),
pui(new Ui::pretreat)
{
pui->setupUi(this);
qDebug() << A->getNumber(); //得到Number的值:11
}
2.主窗口
MainWindow.cpp
#include "pretreat.h"
void MainWindow::PrebtnClicked()
{
pretreat prepic(this); //把当前指针传给prepic中的私有成员A,此时A就是主窗口的地址
prepic.show(); //显示对话框prepic
if (prepic.exec() == QDialog::Accepted) //等待,直到prepic释放退出,和被主窗口接收
return;
}
MainWindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
int getNumber const {return Number;}
private:
int Number = 11;
}
子窗口传信息给主窗口或者兄弟窗口
方法一:自定义信号
1、子窗口
//头文件中声明自定义信号m_TeachRectFlagChanged
class ImageView : public QWidget
{
signals:
void m_TeachRectFlagChanged(bool); //此处传递的是bool型信息,也可其他任意类型信息
}
//在某函数发送信号处写上这样一句话:
emit m_TeachRectFlagChanged(true);
2、接收信号者
//在头文件中声明槽函数和ImageView 对象:
protected slots:
void TeachFlagChange(bool);
private:
ImageView* currentView;
//在该类的构造函数中连接信号与槽:
connect(currentView, SIGNAL(m_TeachRectFlagChanged(bool)), this, SLOT(TeachFlagChange(bool)));
//则在槽函数TeachFlagChange中即可收到currentView发送信号m_TeachRectFlagChanged的值