首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Qt学习日记 Day1:Qt核心机制+信号与槽基础
📅 2026/10/17 12:19:47
✍️ 爱科研究院
👁 阅读 3,247
## 今天学了什么今天学习Qt核的心机制以及信号与槽基础。## Qt核心机制1.元对象系统定义Qt核心机制之一Qt基于C扩展实现的简易反射由moc编译期生成元对象信息表。用来实现信号槽、运行时类型识别、属性系统。前提类继承QObject Q_OBJECT宏。元对象用来描述子类的信息表由moc生成。常用宏1. Q_OBJECT总开关通知moc生成元对象代码2. Q_PROPERTY注册属性用于属性系统3. Q_CLASSINFO添加类静态备注信息4. Q_ENUM注册枚举实现枚举和字符串互转核心功能1. 信号与槽对象间通信2. 运行时类型识别qobject_cast、metaObject()-className()3. 属性系统运行时通过字符串读写属性对象树当创建的对象在堆区时若指定父类是QObject类派生下来的类或者QObject子类派生下来的类可以不用管理释放的操作对象会放入对象树中随父类一起释放父对象析构时会自动析构所有子对象。属性定义依托元对象系统把读写函数登记进元对象表对外暴露接口本身不储存数据数据存于普通成员变量。作用运行时通过字符串读写对象数据可配套NOTIFY信号数据变更时发射通知供QML、属性动画、QSS使用。2、事件循环定义Qt事件调度机制。a.exec()开启程序循环读取事件队列、分发事件给对应对象处理。作用管理事件队列处理鼠标、键盘、窗口重绘、定时器等事件。例1. 鼠标点击按钮 → 生成鼠标事件进入队列事件循环取出交给按钮处理2. QTimer定时器到时 → 产生定时器事件事件循环分发3. 关闭窗口 → 窗口关闭事件最后退出事件循环要点同线程信号槽直接函数调用不进事件队列跨线程信号槽依靠事件循环投递事件实现两者对比1. 元对象系统管信号槽、属性、类型识别。编译期moc生成信息表。2. 事件循环管事件调度分发。程序运行时持续循环处理事件队列。3. 关联跨线程信号槽依赖事件循环元对象是信号槽的底层基础。一句话区分元对象系统提供通信能力事件循环调度消息事件。## 信号与槽### 自定义信号规则信号发送者自定义头文件内写在signals 下返回值为void 只有声明不用实现可以用参数、可以有重载信号接受者既要声明也要实现可以用参数、可以有重载### 信号与槽的5种编码方式①Qt4写法;connectbtnSIGNALclicked()thisSLOTOnBtnClick()②函数指针写法connectbtnQPushbutton::clickedthisMainWindow::OnBtnClick③lambda写法connectbtnQPushbutton::clickedthis[](){ ....... }④UI 转到槽右键转到槽⑤UI 信号槽编辑器只能用Qt内置信号和槽在Designer图形界面绑定信号和槽【编辑】-【编辑信号/槽】### 当信号和槽函数有重载版本方法①用函数指针指向地址:void Teacher:: * teachSignalQstringTeacher:: hungryvoid Student: * studentSignalQstringStudent:: treatconnecttchteachSignalstustudentSignal方法②C14connecttchqOverloadQString(Teacher:: hungry)stuqOverloadQString(Student:: treat)### connect的第五个参数 Qt::ConnectionType作用指定信号触发后槽函数的调用方式枚举5个取值1.Qt::AutoConnection默认值发送者和接收者在同一个线程 → DirectConnection。发送者和接收者在不同线程 → QueuedConnection。2.Qt::DirectConnection发射信号时立刻同步执行槽函数。槽运行在发送者线程。3.Qt::QueuedConnection信号打包成事件加入接收者线程的事件队列。emit直接返回不阻塞。等接收者事件循环取出事件后再执行槽。4.Qt::BlockingQueuedConnection和QueuedConnection类似事件投递到接收者线程。发送线程阻塞直到槽执行完成才继续往下执行。不能在同线程使用会死锁。5.Qt::UniqueConnection不是独立连接模式是标记位一般配合前面类型用|组合。功能避免重复连接。同一个信号与接收对象多次connect只会绑定一次。例connect(sender, Sender::sig, receiver, Receiver::slot, Qt::AutoConnection | Qt::UniqueConnection);## 补充信号与槽特点信号可以连接信号/槽函数信号可以连接多个槽多个信号可以连接同一个槽信号和槽函数的参数类型必须相同信号和槽的参数个数信号的参数个数可以多于槽函数参数的个数反之不行
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/17 12:19:47
一体机软件说明书怎么写:从操作步骤到版本管理的实用指南
2026/10/17 12:19:47
毕业前用AI写作打造个人品牌,从0到1实操指南
2026/10/17 12:14:47
artcraft:在随机与规则之间构建生成艺术工具
2026/10/17 13:05:22
微软通用机器人基础模型rho-base:机器人操作AI入门的完全指南
2026/10/17 13:05:22
SQL子查询实战:从JOIN/临时表分工到性能陷阱与优化建议
2026/10/17 13:05:22
Codex 实战:从需求到交付,把 AI 当队友而非工具
2026/10/17 13:05:22
联邦学习梯度泄露风险:视网膜影像中的梯度反转攻击
2026/10/17 13:05:22
风控场景下逻辑回归实战:可解释性、WOE编码与评分卡转换全解析
2026/10/17 13:00:22
基于机器学习的中文书目自动分类:从TF-IDF到系统实现
2026/10/17 0:02:58
NetSpot 实战:用信道分析与频宽优化解决 Wi-Fi 卡顿
2026/10/17 0:02:58
C++ split() 字符串分割的五种实现与性能实测
2026/10/17 0:02:58
R语言坐标轴范围设置:从xlim/ylim到coord_cartesian的完整指南
2026/10/17 10:00:11
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/17 10:16:23
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/17 10:16:02
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/17 10:15:50
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/16 18:46:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/16 18:46:46
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)