一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

本文介绍Qt的信号是否被连接了和信号槽之间的参数是否一致的判断方法。

1. 判断信号是否正确连接

  通过判断connect的返回值是否为true。

1 bool ok = connect(this, SIGNAL(signal1()), this, SLOT(slot1()));
2 // 打印true
3 qDebug() << ok;

2. 判断信号是否被连接了

  receivers返回的是该信号的连接数,如果大于0则为信号有连接。

  • 原型:
[protected] int QObject::receivers(const char *signal) const
  • 实现
bool isSignalConnected = this->receivers(SIGNAL(signal1())) > 0;

Qt5.0版本以上可以这样做:

1 QMetaMethod _signal1 = QMetaMethod::fromSignal(&Object::signal1);
2 isSignalConnected = this->isSignalConnected(_signal1);

3. 判断信号槽之间参数是否一致

  • 原型:
1 [static] bool QMetaObject::checkConnectArgs(const char *signal, const char *method)
2 [static] bool QMetaObject::checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method)
  • 实现:
1 bool ok = QMetaObject::checkConnectArgs(SIGNAL(signal2(int)), SLOT(slot2(int)));
2 qDebug() << ok;

4. 例子

复制代码
 1 class Object : public QObject
 2 {
 3     Q_OBJECT
 4 public:
 5     Object()
 6     {
 7         // 返回值可判断信号槽是否连接成功。
 8         bool ok = connect(this, SIGNAL(signal1()), this, SLOT(slot1()));
 9         // 打印true
10         qDebug() << ok;
11 
12         // receivers返回的是该信号的连接数,如果大于0则为信号有连接。
13         bool isSignalConnected = this->receivers(SIGNAL(signal1())) > 0;
14         // 打印true
15         qDebug() << isSignalConnected;
16 
17         QMetaMethod _signal1 = QMetaMethod::fromSignal(&Object::signal1);
18         isSignalConnected = this->isSignalConnected(_signal1);
19         // 打印true
20         qDebug() << isSignalConnected;
21 
22         // 检查参数是否一致
23         ok = QMetaObject::checkConnectArgs(SIGNAL(signal2(int)), SLOT(slot2(int)));
24         // 打印true
25         qDebug() << ok;
26     }
27 
28 signals:
29     void signal1();
30     void signal2(int);
31 
32 public slots:
33     void slot1() { }
34     void slot2(int) { }
35 };
复制代码

 

posted on   一杯清酒邀明月  阅读(1012)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-09-07 OpenCV waitKey()
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示