【QT】中常见的信号槽使用错误汇总

常见错误及改正:

当涉及到Qt的信号槽时,让我们举例说明一些常见错误,并展示如何进行改正:

错误1: 未连接信号与槽

// 错误示例 QObject::connect(button, SIGNAL(clicked()), this, SLOT(showMessage())); // 没有连接按钮的clicked信号与槽函数

改正方法:

// 正确示例 QObject::connect(button, &QPushButton::clicked, this, &MyWidget::showMessage);

错误2: 信号和槽参数不匹配

// 错误示例 class MyWidget : public QWidget { Q_OBJECT public slots: void slotWithInt(int value); }; // ... QObject::connect(sender, SIGNAL(someSignal()), this, SLOT(slotWithInt(QString))); // 参数不匹配

改正方法:

// 正确示例 class MyWidget : public QWidget { Q_OBJECT public slots: void slotWithInt(int value); }; // ... QObject::connect(sender, SIGNAL(someSignal(int)), this, SLOT(slotWithInt(int))); // 参数匹配

错误3: 未使用Q_OBJECT宏

// 错误示例 class MyWidget : public QWidget { public: MyWidget(QWidget parent = nullptr) : QWidget(parent) {} public slots: void showMessage() { / ... */ } };

改正方法:

// 正确示例 class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget parent = nullptr) : QWidget(parent) {} public slots: void showMessage() { / ... */ } };

错误4: 跨线程连接未处理

// 错误示例 QObject::connect(sender, SIGNAL(someSignal()), receiver, SLOT(slotInDifferentThread())); // 未处理跨线程连接

改正方法:

// 正确示例 QObject::connect(sender, SIGNAL(someSignal()), receiver, SLOT(slotInDifferentThread()), Qt::QueuedConnection); // 使用Qt::QueuedConnection来处理跨线程连接

相关推荐
Bert.Cai3 小时前
Python flush函数作用
开发语言·python
比昨天多敲两行3 小时前
C++ Lsit
开发语言·c++·算法
野犬寒鸦3 小时前
从零起步学习计算机操作系统:I/O篇
服务器·开发语言·网络·后端·面试
姓刘的哦3 小时前
Qt实现蚂蚁线
开发语言·qt
布局呆星3 小时前
Python 文件操作教程
开发语言·python
Elnaij3 小时前
从C++开始的编程生活(23)——哈希表
开发语言·c++
英英_3 小时前
优化 MATLAB MapReduce 程序性能:从基础调优到进阶提速
开发语言·matlab·mapreduce
LSL666_3 小时前
BaseMapper——新增和删除
java·开发语言·mybatis·mybatisplus
xiangpanf4 小时前
PHP vs C语言:30字解析两大编程语言差异
c语言·开发语言·php
wdfk_prog4 小时前
MAX14830 可移植 C 驱动实现分析:一个适合多串口扩展场景的开源基础版本
c语言·开发语言·开源