首页 > 其他分享 >Qt -- 判断信号是否绑定成功

Qt -- 判断信号是否绑定成功

时间:2023-10-16 17:46:53浏览次数:27  
标签:const Qt -- SIGNAL 绑定 signal1 bool qDebug true

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

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

bool _ok = connect(this, SIGNAL(signal1()), this, SLOT(slot1()));
// 打印true
qDebug() << _ok;

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

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

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

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

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

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

  • 原型:
[static] bool QMetaObject::checkConnectArgs(const char *signal, const char *method)
[static] bool QMetaObject::checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method)
  • 实现:
bool _ok = QMetaObject::checkConnectArgs(SIGNAL(signal2(int)), SLOT(slot2(int)));
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 };

 

标签:const,Qt,--,SIGNAL,绑定,signal1,bool,qDebug,true
From: https://www.cnblogs.com/zzzsj/p/17767907.html

相关文章

  • 实验2
    实验2-11#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<math.h>56#defineN57#defineN13748#defineN2465910intmain()11{12intnumber;13inti;1415srand(time(0))......
  • Mac OS安装特定python版本
    在MacOS上安装特定版本Python的常用方式是使用pyenv版本管理器。以下是一些步骤:首先,你需要使用Homebrew来安装pyenv。在Terminal中输入以下命令:/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"然后安装pyenv:b......
  • 算法·数学
    数学:证明方法:反证法,双向证明法质因数约数:试除法约数个数(a1+1)(a2+1)...(an+1)=\(\prod_1^{约数个数}(a_i+1)\)约数之和(p1^0+p1^1+...+p1^a1)...=\(\prod_1^{约数个数}\sum_{i=0}^{每个约数重复次数a_i}(b^i)\)gcd最大公约数——辗转相除法(欧几里得算法)证......
  • 系统分析与设计:
    瀑布开发系统规划每步都要确认验证系统分析系统设计软件编程系统测试系统运行反馈给以上类:抽象,鱼对象:具象,唯一,我手里那条鱼......
  • docker容器部署jenkins
    1.下载镜像dockerpulljenkins/jenkins2.创建用户和数据目录并授权useradd-u1000jenkins-M-s/sbin/nologinmkdir/data/jenkins/-pchown-Rjenkins:jenkins/data/jenkins/3.运行镜像dockerrun\--namejenkins\-p8080:8080-p50000:50000\--privilege......
  • 实验2
    #include<stdio.h>intmain(){charcolour;while(scanf("%c",&colour)!=EOF){if(colour>='a'&&colour<='z'){if(colour=='r'){prin......
  • 实验二
    一.实验任务一源码#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%(N2-N1+1)+......
  • 数据字典
           ......
  • 实验二
    任务1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;i++){number=rand()%(N2-N1+1)+N1;pri......
  • 【Kaggle】Spam/Ham Email Classification
    基本思想需求是对垃圾邮件进行分类。思路1:使用LSTM、GRU等自带的时序模型进行分类。思路2:使用spacy这个NLP库,里面的textcat可直接用来文本分类实际上,思路2比思路1更优。由于是入门题,就只使用思路1了。思路2代码参考:https://blog.csdn.net/qq_21201267/article/details/109109......