qt的子窗体调用父窗体的函数

#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);
}


最后效果如下:


#3、总结

猜你喜欢

转载自blog.csdn.net/maokexu123/article/details/126470758