QT子窗体直接调用父窗体成员、函数、控件的方法
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子窗体直接调用父窗体成员、函数、控件的方法相关推荐
- C# 在子窗体中调用父窗体的方法
C# 在子窗体中调用父窗体的方法 在改软件的时候碰上一个非常麻烦的问题,查了好久才顺利解决 具体方法参考了 https://blog.csdn.net/lz00728/article/details/ ...
- C++ Qt中其他类调用窗口中的ui控件
目录 前言 方法 1 其他类必须继承QWidegt及其派生类 2 将主窗口UI公有化 3 定义一个静态的Widget指针 4 将mywidget指针中的ui指针传给UiOperationDlg.h中我 ...
- window.opener用法(在子窗体中获得父窗体的方法)
window.opener 实际上就是通过window.open打开的窗体的父窗体. 比如在父窗体parentForm里面 通过 window.open("subForm.html" ...
- c#如何将子窗体显示到父窗体的容器(panel)控件中
如何将一个窗体显示到一个容器控件中,刚开始想的比较简单,用窗体容器控件添加一般控件的方法,试了一试,代码如下: Form2 frm = new Form2();this.panel1.Controls ...
- C# winform中一个类中如何调用另一个窗体的控件或方法
转载地址:http://blog.csdn.net/ichenqingyun/article/details/52622340 一种是创建窗体对象的方式,通过对象调用控件或方法 例如: Form1 f ...
- html调用父页面的函数,javascript – 如何从子窗口jquery调用父窗口函数?
我只需要在用户关注子窗口时调用父窗口中的函数. 我在父窗口中有这个代码, function CallParent() { alert(" Parent window Alert") ...
- 在一个窗体中调用另一个窗体的控件或方法(C#)
在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...
- iframe子页面调用父页面javascript函数的方法
1.iframe子页面调用 父页面js函数 子页面调用父页面函数只需要写上window.parent就可以了.比如调用a()函数,就写成: window.parent.a(); 2.iframe父页面 ...
- 【Kotlin】扩展函数 ( 扩展函数声明 | 调用方式 | 与成员函数优先级 | 接收者空值处理 )
文章目录 I . 扩展函数 总结 II . 扩展函数概念简介 III . 扩展函数简单示例 IV . 扩展函数调用选择方式 : 静态解析 V . 扩展函数 调用优先级 VI . 扩展函数 接收者 空值 ...
最新文章
- 阿里员工绩效只拿3.25!自我反省:平时假装努力!晚上没加班!去厕所时间太长!还老买彩票!...
- 巧用事件查看器维护服务器安全
- for of 和 for in 在数组和对象中的区别
- oracle允许空行,oracle用户权限的一些基本操作
- 第三只眼使用局域网版本还是网络版好_iOS13.4测试版使用3天后,发现3个优化,建议升级!...
- 华为交换机端口不配置access_华为交换机如何配置端口组?华为交换机端口组-百度经验...
- python xlrd导入后怎么保存_Python xlrd模块导入过程及常用操作
- PLSQL如何将千万数据快速插入到另一张表中_数据库设计中的 9 大常见错误
- ZStack源码剖析之核心库鉴赏——Defer
- Yii框架多表查询(一对一与多对一)
- 【转】C++连接SQL2000
- UTF-8,Unicode,GBK,希腊字母读法,ASCII码表,HTTP错误码,URL编码表,HTML特殊字符,汉字编码简明对照表...
- 互联网版本(支持手机APP)云天售后服务软件上线
- 如何批量PDF转换JPG
- 自然语言处理NLP中的N-gram模型
- [线段树][数学] Jzoj P4237 Melancholy
- android7.0后台,安卓7.0带来一键清理后台 真能使手机变快吗
- VIVO NEX3高层预热,差0.4到100%屏占比,这得让多少人心动
- 基于嵌入式设备的 单目标跟踪算法
- IPS面板和PLS液晶面板区别