当前位置: 首页 > news >正文

Qt:自定义信号,信号emit,传参问题,信号槽与moc

一、自定义信号,信号emit

1、自定义信号

在头文件中 加入signals: 就可以编写信号
在这里插入图片描述

2、emit

emit的作用是通知信号发生

二、跨UI控件传参

在这里插入图片描述
每次按Dialog添加按钮主控件数字会增长

// .h
private slots:void on_btnAdd_clicked();
signals:void sign_add(int value);
-----------------------------------------------
//.cpp
void setDialog::on_btnAdd_clicked()
{static int num = 1;emit sign_add(num++);
}
//.h
private slots:void on_btnOpen_clicked();void addnum(int value);
------------------------------------------------
//.cpp
void Widget::on_btnOpen_clicked()
{setDialog d;connect(&d,&setDialog::sign_add,this,&Widget::addnum);d.exec();
}void Widget::addnum(int value)
{qDebug()<<value;ui->lineEdit->setText(QString::number(value));
}

三、跨线程之间传参修改控件


子线程自动后台添加数字

//.h
#include <QThread>class XThread : public QThread
{Q_OBJECTpublic:XThread();
signals:void sign_send(int value);
private:void run() override;//重载 QThread 多线程基类 源码中run为虚函数
};
------------------------------------------------------------------
//.cpp
void XThread::run()
{static int num = 0;while(true){emit XThread::sign_send(num++);XThread::msleep(200);}
}
//.cpp
void Widget::on_btnOpen_clicked()
{XThread *th = new XThread();connect(th,&XThread::sign_send,this,&Widget::addnum);th->start();
}

四、槽函数的参数和信号参数的关系

Qt槽函数的参数需要和信号函数保持一致,可以比信号函数的参数少,但是不能顺序不同,也不能比信号函数的参数多。

五、解决信号重载问题

在这里插入图片描述

1、Qt4写法

connect(th,SIGNAL(sign_send(int)),this,SLOT(addnum(int)));

2、泛型写法

    connect(th,QOverload<int>::of(&XThread::sign_send),this,&Widget::addnum);

六、Qt信号槽与moc

moc全称是 Meta-0bject Compiler,也就是“元对象编译器”。Qt程序在交由标准编译器编译之前,先要使用moc分析C++源文件。如果它发现在一个头文件中包含了宏Q_OBJECT,则会生成另外一个C++源文件,这个源文件中包含了Q_OBJECT宏的实现代码,这个新的文件名字将会是原文件名前面加上moc构成,这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,我们还可以看出一点,moc的执行是在预理器之前。因为预处理器执行之后,Q_OBJECT宏就不存在了。
通俗来讲,就是moc把Qt中的一些不是C++的关键字做了解析,让C++的编译器在编译的过程中认识Qt中的关键字。
在这里插入图片描述
配置好环境后 ,在终端运行moc指令
在这里插入图片描述
生成的C++文件会在C++编译过程中链接到二进制文件中

相关文章:

  • 蓝桥杯刷题--python-6
  • 【后端高频面试题--Nginx篇】
  • OpenCV-36 多边形逼近与凸包
  • 【C++】C++11上
  • OCP的operator——(4)用户任务:使用Operator创建etcd集群
  • ubuntu屏幕小的解决办法
  • ES实战--集群扩展
  • 专业140+总分420+东北大学841通信专业基础考研经验东大电子信息与通信工程,真题,大纲,参考书。
  • 【Spring面试题】
  • 跟着pink老师前端入门教程-day26
  • Acwing语法基础课 8.STL(笔记)
  • 【sgCreateTableColumn】自定义小工具:敏捷开发→自动化生成表格列html代码(表格列生成工具)[基于el-table-column]
  • Flume(二)【Flume 进阶使用】
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • 【MySQL】Java的JDBC编程
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Android优雅地处理按钮重复点击
  • Asm.js的简单介绍
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • echarts花样作死的坑
  • HashMap ConcurrentHashMap
  • Java Agent 学习笔记
  • javascript 哈希表
  • Laravel 菜鸟晋级之路
  • Laravel5.4 Queues队列学习
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • mysql innodb 索引使用指南
  • ng6--错误信息小结(持续更新)
  • overflow: hidden IE7无效
  • php中curl和soap方式请求服务超时问题
  • SAP云平台里Global Account和Sub Account的关系
  • Vue小说阅读器(仿追书神器)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • web标准化(下)
  • 对象引论
  • 猴子数据域名防封接口降低小说被封的风险
  • 聚簇索引和非聚簇索引
  • 利用DataURL技术在网页上显示图片
  • 深入 Nginx 之配置篇
  • 什么软件可以剪辑音乐?
  • 说说动画卡顿的解决方案
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我的面试准备过程--容器(更新中)
  • 翻译 | The Principles of OOD 面向对象设计原则
  • $jQuery 重写Alert样式方法
  • (1)Android开发优化---------UI优化
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (5)STL算法之复制
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424