METHOD
, SLOT
, SIGNAL
宏前面对应的是字符串数字;#
的意思是字符串拼接;METHOD
, SLOT
, SIGNAL
宏实则就是加了前缀的字符串。define METHOD(a) "0"#a
define SLOT(a) "1"#a
define SIGNAL(a) "2"#a
SIGNAL
与 SLOT
;QPushButton *button = new QPushButton(this);
connect(button, SIGNAL(clicked()),
this, SIGNAL(buttonClicked()));
对应宏
METHOD
,SLOT
,SIGNAL
对应判断标记QMETHOD_CODE
,QSLOT_CODE
,QSIGNAL_CODE
的定义
#define QMETHOD_CODE 0 // member type codes
#define QSLOT_CODE 1
#define QSIGNAL_CODE 2
static int extractCode(const char *member)
{
/* extract code, ensure QMETHOD_CODE <= code <= QSIGNAL_CODE */
return (((int)(*member) - '0') & 0x3);
}
#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;
}
SLOT
SIGNAL
METHOD
(((int)(*member)-'0')&0x3)
主要作用为提取第一个字符减去 0
的ascii码再 &3
的出对应的数字就是对应结果了;