1、背景
在QT开发中,用遇到子窗体,调用父窗体函数的情况。
一般都是父窗体调用子窗体,但反过的情况也是有的,可以见得编程什么情况都有
2、实例
2.1、避免交互引用
如果交互引用,编译都过不了。
通过在头文件当中,声明类,这里是这样声明的:
class Dialog;这个类就是父窗体了。
DialogSon1:这个类是子窗体
ifndef DIALOGSON1_H
#define DIALOGSON1_H
#include <QDialog>
namespace Ui {
class DialogSon1;
}
class Dialog;
class DialogSon1 : public QDialog
{
Q_OBJECT
public:
explicit DialogSon1(QWidget *parent = 0);
~DialogSon1();
private slots:
void on_pushButton_clicked();
private:
Ui::DialogSon1 *ui;
Dialog *m_parent;
};
#endif // DIALOGSON1_H
父窗体的方法实现如下,现在就是想实现,子窗体如何调用父窗体的这一个函数:
QString Dialog::getState()
{
qDebug()<<"I'm parent class, I'm eating";
QString str = "I'm parent class, I'm eating";
return str;
}
2.2、通过parentWidget()获取父窗体
现在开始调用这一个方法,先获取父窗体,并调用父窗体的方法就可以了:
DialogSon1::DialogSon1(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogSon1)
{
ui->setupUi(this);
m_parent = (Dialog *)parentWidget();
}
void DialogSon1::on_pushButton_clicked()
{
QString str = m_parent->getState();
ui->label->setText(str);
}
最后效果如下:
image.png
3、总结
image.png