前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt信号与槽宏定义

Qt信号与槽宏定义

作者头像
Qt君
发布2019-07-15 15:21:42
1.2K0
发布2019-07-15 15:21:42
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

1 信号与槽的宏定义

  • METHOD, SLOT, SIGNAL宏前面对应的是字符串数字;
  • #的意思是字符串拼接;
  • METHOD, SLOT, SIGNAL宏实则就是加了前缀的字符串。
代码语言:javascript
复制
define METHOD(a)   "0"#a
define SLOT(a)     "1"#a
define SIGNAL(a)   "2"#a

2 信号与槽的使用

  • 先定义信号槽使用的宏 SIGNALSLOT;
  • 再通过使用connect连接使用;
  • 例:
代码语言:javascript
复制
QPushButton *button = new QPushButton(this);
connect(button, SIGNAL(clicked()),
        this, SIGNAL(buttonClicked()));

3 解析函数

对应宏 METHOD, SLOT, SIGNAL对应判断标记 QMETHOD_CODE, QSLOT_CODE, QSIGNAL_CODE的定义

代码语言:javascript
复制
#define QMETHOD_CODE  0 // member type codes
#define QSLOT_CODE    1
#define QSIGNAL_CODE  2

代码语言:javascript
复制
static int extractCode(const char *member)
{
    /* extract code, ensure QMETHOD_CODE <= code <= QSIGNAL_CODE */
    return (((int)(*member) - '0') & 0x3);
}

3.1 使用

代码语言:javascript
复制
#include <QObject>
#include <QDebug>

static int extractCode(const char *member)
{
    /* extract code, ensure QMETHOD_CODE <= code <= QSIGNAL_CODE */
    return (((int)(*member) - '0') & 0x3);
}

static void exec(int code)
{
    switch (code) {
        case QMETHOD_CODE: qDebug()<<"METHOD"; break;
        case QSLOT_CODE:   qDebug()<<"SLOT";   break;
        case QSIGNAL_CODE: qDebug()<<"SIGNAL"; break;
        default:           qDebug()<<"Unknow"; break;
    }
}

int main(int argc, char *argv[])
{
    int code1 = extractCode(SLOT(test()));
    int code2 = extractCode(SIGNAL(test()));
    int code3 = extractCode(METHOD(test()));

    exec(code1);
    exec(code2);
    exec(code3);

    return 0;
}

3.2 输出

代码语言:javascript
复制
SLOT
SIGNAL
METHOD

3.3 知识点

  • (((int)(*member)-'0')&0x3)主要作用为提取第一个字符减去 0的ascii码再 &3的出对应的数字就是对应结果了;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 信号与槽的宏定义
  • 2 信号与槽的使用
  • 3 解析函数
    • 3.1 使用
      • 3.2 输出
        • 3.3 知识点
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档