当前位置:网站首页>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
边栏推荐
- buu web
- Domestic PMP certificate of gold content how
- boostrap多选PID查找端口 window
- Open source summer | Cloud server ECS installs Mysql, JDK, RocketMQ
- Oracle使用expdp和impdp导出导入数据
- 如何将二叉搜索树转化为一个有序的双向链表(原树上修改)
- Altium Designer 19.1.18 - 保护锁定的对象
- Webmine Webpage Mining Trojan Analysis and Disposal
- 2022强网杯web(部分)
- Yolov7:Trainable bag-of-freebies sets new state-of-the-art for real-time objectdetectors
猜你喜欢

开源一夏 | 云服务器ECS安装Mysql、JDK、RocketMQ

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

未知点云结构文件转换需求

ctfshow终极考核web654

Yolov7:Trainable bag-of-freebies sets new state-of-the-art for real-time objectdetectors

炽热如初 向新而生|ISC2022 HackingClub白帽峰会圆满举办!

智能盘点钢筋数量AI识别

Driving point cloud format changes bring efficiency improvement

rk3399 驱动屏参的几种方式

docker 部署redis集群
随机推荐
Altium Designer 19.1.18 - Protecting Locked Objects
VSCode—常用快捷键(持续记录
NFT宝典:你需要知道NFT的术语和定义
Hardware factors such as CPU, memory, and graphics card also affect the performance of your deep learning model
Exploration and Practice of Database Governance
ctfshow终极考核web654
27. Dimensionality reduction
mysql基础
AXI interface application of Zynq Fpga image processing - the use of axi_lite interface
Develop your own text recognition application with Tesseract
PMP证书在哪些行业有用?
Oracle增加表空间解决ORACLE ORA-01653: unable to extend table报错
DGL安装教程
如何为Web3.0世界启动完美的DAO
Moke, dynamic image resource package display
Axure9基本交互操作(一)
数字重塑客观世界,全空间GIS发展正当其时
AtCoder Beginner Contest 262 D - I Hate Non-integer Number
Is the International Project Manager PMP certificate worth taking?
rk3399-9.0一级二级休眠