当前位置:网站首页>QT 子窗口—>主窗口 信号和槽的交互
QT 子窗口—>主窗口 信号和槽的交互
2022-08-04 21:52:00 【天天进步2015】
背景:
要实现的功能:
主窗口MainWindow中打开子窗口UdpChannel后,子窗口发送一个信号,传递一个QString,要求在主窗口的QTextBrowser中打印出来!(比如操作的日志信息)
实现原理:
①在子窗口中声明信号
②在主窗口中声明并实现槽函数
③在主窗口中庸connect绑定信号和槽
④子窗口中发送信号(emit)
具体实现:
①UdpChannel.h文件中
//日志打印信号
signals:
void GetUdpLogMsg(QString msg);//不需要实现
②MainWindow.h文件中
//信号-槽的方式打印日志
public slots:
void PrintLogMsg(QString msg);
MainWindow.cpp文件中对槽进行实现
void MainWindow::PrintLogMsg(QString msg)
{
ui->outputTxt->append(msg);
}
③在MainWindow.cpp文件中进行绑定
udp = new UdpChannel ( ui -> mdiArea );
//绑定从udpChannel中发送过来的日志打印信号
connect(udp, SIGNAL(GetUdpLogMsg(QString )), this, SLOT(PrintLogMsg(QString )));
showWidgetOnMDI(udp);
注意:不是在MainWindow这个类的构造函数中绑定,教训啊!
④在UdpChannel.cpp文件中发送信号
//发送日志打印信号
void UdpChannel::on_UDPButton_clicked()
{
emit GetUdpLogMsg("UDPchannel中的日志信息");
}
总结:
①connect()绑定函数,如果放到主窗口的构造函数中,此时,子窗口的类还没新建对象,没有分配内存地址,如果new一个对象,程序不会报错(搜一下,有好新手跟我一样有这个疑问),但是新建的子窗口对象与通过主窗口的点击按钮后,新建的子窗口对象是两码事,在内存中是两个不同的地址,我们要绑定的应该是后者与主窗口的信号槽绑定,所以,connect函数应该放到主窗口点击子窗口按钮代码里面。
②connect()绑定函数,如果放到子窗口的构造函数中,发送用this,接收用主窗口指针,原理一样,如果此处新建主窗口对象,然后建立连接,其实内存中有两个主窗口对象了,绑定的并不是我想显示日志信息的主窗口对象,此处可以直接调用出窗口已新建好对象的指针。
③connect(),在子窗口和主窗口交互的过程中,其实放到哪里不重要,重要的是发送和接收的指针一定要是已新建好的主窗口/子窗口对象的指针,并且确保是新建好后再执行该connect()绑定函数。
————————————————
版权声明:本文为CSDN博主「jin-zi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jinzijunjun/article/details/51674086
边栏推荐
- 【Social Marketing】WhatsApp Business API: Everything You Need to Know
- Go----Go 语言基础之标识符、关键字、命名规范、变量、常量
- SPSS-System Clustering Software Practice
- Some problems with passing parameters of meta and params in routing (can be passed but not passed, empty, collocation, click to pass multiple parameters to report an error)
- CPU、内存、显卡等硬件因素也影响着你的深度学习模型性能
- unity2D横版游戏教程8-音效
- Cocoa Application-test
- DSPE-PEG-Aldehyde, DSPE-PEG-CHO, Phospholipid-Polyethylene Glycol-Aldehyde A hydrophobic 18-carbon phospholipid
- UDP communication
- ES 数据聚合、数据同步、集群
猜你喜欢

七夕特制:《牛郎会织女》

基于声卡实现的音频存储示波器,可作为电磁学实验的测量仪表

com.jacob.com.ComFailException: Invoke of: ActiveDocument

Win11如何设置软件快捷方式?

数电快速入门(二)(复合逻辑运算和逻辑代数的基本定律的介绍)

Oracle增加表空间解决ORACLE ORA-01653: unable to extend table报错

如何将二叉搜索树转化为一个有序的双向链表(原树上修改)

LeetCode143:重排链表

【Social Marketing】WhatsApp Business API: Everything You Need to Know

开发deepstram的自定义插件,使用gst-dseaxmple插件进行扩充,实现deepstream图像输出前的预处理,实现图像自定义绘制图(精四)
随机推荐
强网杯2022——WEB
基于 Milvus 和 ResNet50 的图像搜索(部署及应用)
DGL安装教程
ES6高级-async的用法
SPSS-System Clustering Software Practice
数电快速入门(四)(组合逻辑电路的分析以及设计的介绍)
LeetCode143:重排链表
PowerCLi batch configuration of NTP
PyTorch Geometric (PyG) 安装教程
LeetCode: 406. 根据身高重建队列
Webmine Webpage Mining Trojan Analysis and Disposal
milvus配置相关
如何在项目中正确使用WebSocket
Altium Designer 19.1.18 - 画多边形铜皮挖空时,针对光标胡乱捕获的解决方法
【SQL之降龙十八掌】01——亢龙有悔:入门10题
Open source summer | Cloud server ECS installs Mysql, JDK, RocketMQ
unity2D横版游戏教程8-音效
【CC3200AI 实验教程 1】疯壳·AI语音人脸识别(会议记录仪/人脸打卡机)-开发环境搭建
数电快速入门(三)(卡诺图化简法的介绍)
CPU、内存、显卡等硬件因素也影响着你的深度学习模型性能