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

说明:
简单点的方法就是用parentWidget函数,子类中调用该函数然后强转成父窗体,就可以调用父窗体公有成员、函数了。

如果想调用父窗体的控件,要么让父窗体提供公有接口,要么直接把ui改成公有成员。
注意如果是在线程调用父窗体ui,最好用信号与槽,不然会出现你意想不到的情况,直接报错崩溃。信号与槽又有5种连接方式(可控制是否阻塞,是否有返回值等)感兴趣自行了解。
多个窗体嵌套其实也差不多。
下面就简单演示一下子窗体调用父窗体(有点取巧了):

Base类是父窗体,child类是子窗体

首先,父类的头文件声明子类。然后将父窗体的ui访问权限修改为public,并添加子窗体对象成员。
父窗体头文件 base.h:

#ifndef BASE_H
#define BASE_H#include <QMainWindow>// 声明子类
class Child;QT_BEGIN_NAMESPACE
namespace Ui { class Base; }
QT_END_NAMESPACEclass Base : public QMainWindow
{Q_OBJECTpublic:Base(QWidget *parent = nullptr);~Base();void Test();
public:Ui::Base *ui;// 子窗体对象Child *child;
};#endif // BASE_H

接着在子头文件声明父类,并添加父窗体对象(指针)。
子窗体头文件 child.h:

#ifndef CHILD_H
#define CHILD_H#include <QWidget>
#include <QDebug>//声明父窗体类Base
class Base;namespace Ui {class Child;
}class Child : public QWidget
{Q_OBJECTpublic:explicit Child(QWidget *parent = nullptr);~Child();private:Ui::Child *ui;// 添加父窗体的对象成员,这里必须是指针Base *base;
};#endif // CHILD_H

在base.cpp里声明子类的头文件和ui头文件:
#include “child.h”
#include “ui_child.h”
base.cpp:

#include "base.h"
#include "ui_base.h"// 声明子类的头文件,才可以调用子类的对象
#include "child.h"
#include "ui_child.h"Base::Base(QWidget *parent): QMainWindow(parent), ui(new Ui::Base)
{ui->setupUi(this);//生成子窗体实例child = new Child(this);
}Base::~Base()
{delete ui;
}// 测试函数
void Base::Test()
{qDebug()<<"base test";
}

在child.cpp里声明父类的头文件和ui头文件:
#include “base.h”
#include “ui_base.h”
child.cpp:

#include "child.h"
#include "ui_child.h"// 在此声明 base.h 和 ui_base.h才可以调用父类对象,而且不会造成头文件声明冲突
#include "base.h"
#include "ui_base.h"Child::Child(QWidget *parent) :QWidget(parent),ui(new Ui::Child)
{ui->setupUi(this);// 通过parentWidget()函数,获取父窗体对象base = (Base *)parentWidget();// 调用base的公有方法和ui控件base->Test();base->ui->label->setText("base ui");
}Child::~Child()
{delete ui;
}

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

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

  1. C# 在子窗体中调用父窗体的方法

    C# 在子窗体中调用父窗体的方法 在改软件的时候碰上一个非常麻烦的问题,查了好久才顺利解决 具体方法参考了 https://blog.csdn.net/lz00728/article/details/ ...

  2. C++ Qt中其他类调用窗口中的ui控件

    目录 前言 方法 1 其他类必须继承QWidegt及其派生类 2 将主窗口UI公有化 3 定义一个静态的Widget指针 4 将mywidget指针中的ui指针传给UiOperationDlg.h中我 ...

  3. window.opener用法(在子窗体中获得父窗体的方法)

    window.opener 实际上就是通过window.open打开的窗体的父窗体. 比如在父窗体parentForm里面 通过 window.open("subForm.html" ...

  4. c#如何将子窗体显示到父窗体的容器(panel)控件中

    如何将一个窗体显示到一个容器控件中,刚开始想的比较简单,用窗体容器控件添加一般控件的方法,试了一试,代码如下: Form2 frm = new Form2();this.panel1.Controls ...

  5. C# winform中一个类中如何调用另一个窗体的控件或方法

    转载地址:http://blog.csdn.net/ichenqingyun/article/details/52622340 一种是创建窗体对象的方式,通过对象调用控件或方法 例如: Form1 f ...

  6. html调用父页面的函数,javascript – 如何从子窗口jquery调用父窗口函数?

    我只需要在用户关注子窗口时调用父窗口中的函数. 我在父窗口中有这个代码, function CallParent() { alert(" Parent window Alert") ...

  7. 在一个窗体中调用另一个窗体的控件或方法(C#)

    在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...

  8. iframe子页面调用父页面javascript函数的方法

    1.iframe子页面调用 父页面js函数 子页面调用父页面函数只需要写上window.parent就可以了.比如调用a()函数,就写成: window.parent.a(); 2.iframe父页面 ...

  9. 【Kotlin】扩展函数 ( 扩展函数声明 | 调用方式 | 与成员函数优先级 | 接收者空值处理 )

    文章目录 I . 扩展函数 总结 II . 扩展函数概念简介 III . 扩展函数简单示例 IV . 扩展函数调用选择方式 : 静态解析 V . 扩展函数 调用优先级 VI . 扩展函数 接收者 空值 ...

最新文章

  1. 阿里员工绩效只拿3.25!自我反省:平时假装努力!晚上没加班!去厕所时间太长!还老买彩票!...
  2. 巧用事件查看器维护服务器安全
  3. for of 和 for in 在数组和对象中的区别
  4. oracle允许空行,oracle用户权限的一些基本操作
  5. 第三只眼使用局域网版本还是网络版好_iOS13.4测试版使用3天后,发现3个优化,建议升级!...
  6. 华为交换机端口不配置access_华为交换机如何配置端口组?华为交换机端口组-百度经验...
  7. python xlrd导入后怎么保存_Python xlrd模块导入过程及常用操作
  8. PLSQL如何将千万数据快速插入到另一张表中_数据库设计中的 9 大常见错误
  9. ZStack源码剖析之核心库鉴赏——Defer
  10. Yii框架多表查询(一对一与多对一)
  11. 【转】C++连接SQL2000
  12. UTF-8,Unicode,GBK,希腊字母读法,ASCII码表,HTTP错误码,URL编码表,HTML特殊字符,汉字编码简明对照表...
  13. 互联网版本(支持手机APP)云天售后服务软件上线
  14. 如何批量PDF转换JPG
  15. 自然语言处理NLP中的N-gram模型
  16. [线段树][数学] Jzoj P4237 Melancholy
  17. android7.0后台,安卓7.0带来一键清理后台 真能使手机变快吗
  18. VIVO NEX3高层预热,差0.4到100%屏占比,这得让多少人心动
  19. 基于嵌入式设备的 单目标跟踪算法
  20. IPS面板和PLS液晶面板区别

热门文章

  1. 二级域名配置以及nginx解析二级域名到html页面
  2. jvm-sandbox:基础了解及demo演示
  3. 贴片功率电感封装尺寸与性能
  4. [AFCTF2018]可怜的RSA
  5. Html5版音乐游戏制作及分享(H5音乐游戏)
  6. iOS应用中crash 奔溃解析
  7. 机器人 瓷砖墙面清洗_卫生间瓷砖怎么清洗 教你几招让卫生间墙面光洁如新
  8. 人口收入普查数据探索
  9. raid1重建时间_Intel主板RAID1恢复方法图解
  10. 3090人工神经网络工作站配置