【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来处理跨线程连接

相关推荐
yue008几秒前
C# Environment类的介绍
开发语言·c#·environment
即将进化成人机8 分钟前
Spring Boot配置文件
java·开发语言·intellij-idea
龙智DevSecOps解决方案11 分钟前
Java开发基础:什么是Spring Boot?一文了解其优势、对比以及如何通过Perforce JRebel实现高效开发
java·开发语言·spring boot·jrebel·perforce·java开发
PPPPickup16 分钟前
easychat---创建,获取,获取详细,退群,解散,添加与移除群组
java·开发语言·后端·maven
火山灿火山1 小时前
Qt常用控件(一)
服务器·qt
liulilittle1 小时前
C++ 并发双阶段队列设计原理与实现
linux·开发语言·c++·windows·算法·线程·并发
lly2024061 小时前
并查集快速查找
开发语言
繁星蓝雨1 小时前
我与C++的故事(杂谈)
开发语言·c++
除了代码啥也不会1 小时前
Java基于SSE流式输出实战
java·开发语言·交互
Jacob程序员2 小时前
欧几里得距离算法-相似度
开发语言·python·算法