QT子窗体直接调用父窗体成员、函数、控件的方法

QT子窗体直接调用父窗体成员、函数、控件的方法,第1张

QT子窗体调用父窗体成员、函数、控件的方法

首先,要在父窗体类前面声明子窗体类,这里很关键,不能少,不然会报错。


然后将父窗体的ui访问权限修改为public,并添加子窗体对象成员。


记得加头文件。



父窗体头文件 base.h:

// 子窗体头文件
#include "child.h"
//声明子窗体的类,这里很关键,不能少
class Child;

class Base : public QMainWindow
{
    Q_OBJECT
public:
    Base(QWidget *parent = nullptr);
    ~Base();
	// 父类方法
    void Test();

//将父窗体的ui对象 设为共有才能被子窗体访问
public:
    Ui::Base *ui;
    // 子窗体对象
    Child *child;
};

接着在子窗体的类成员添加父窗体的头文件"base.h"和"ui_base",然后声明父窗体类Class Base,同样这里也很关键不能少,不然会报错,最后添加成员:父窗体对象(指针)。



子窗体头文件 child.h:

// 添加父窗体的头文件
#include "base.h"
//这个头文件是父窗体的ui控件,必须要加上这个头文件才能访问父窗体的控件	
#include "ui_base.h"
//声明父窗体类Base, 不然会报错
class Base;
class Child : public QWidget
{
    Q_OBJECT

public:
    explicit Child(QWidget *parent = nullptr);
    ~Child();

private:
    Ui::Child *ui;
    // 添加父窗体的对象成员,这里必须是指针
    Base *base;
};

父窗体构造函数:

Base::Base(QWidget *parent): QMainWindow(parent), ui(new Ui::Base)
{
    ui->setupUi(this);

    //生成子窗体实例
    child = new Child(this);
}

子窗体构造函数:

Child::Child(QWidget *parent):QWidget(parent), ui(new Ui::Child)
{
    ui->setupUi(this);

    // 通过parentWidget()函数,获取父窗体对象
    base = (Base *)parentWidget();

    // 接着就可以直接调用父窗体的 数据成员、方法和控件了
    base->Test();
    base->ui->label->setText("hello");
}

这样就可以子窗体child就可以直接调用父窗体base的成员,方法和控件了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/621735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-15
下一篇 2022-04-15

发表评论

登录后才能评论

评论列表(0条)

保存