我在Google上找不到Qt中宏SIGNAL和SLOT的声明。
当我们说connect(button1, SIGNAL(clicked()), this, SLOT(slotButton1()));时,我想了解这些突出显示的宏接受哪些参数?
如果有文档链接将不胜感激。
Neil在下面的评论中提供的链接中写道:#define SLOT(a) "1"#a
,这里的a代表什么?该链接没有给出。
我在Google上找不到Qt中宏SIGNAL和SLOT的声明。
当我们说connect(button1, SIGNAL(clicked()), this, SLOT(slotButton1()));时,我想了解这些突出显示的宏接受哪些参数?
如果有文档链接将不胜感激。
Neil在下面的评论中提供的链接中写道:#define SLOT(a) "1"#a
,这里的a代表什么?该链接没有给出。
就像Neil所说的那样,SLOT和SIGNAL宏定义为
#define SLOT(a) "1"#a
#define SIGNAL(a) "2"#a
#a(使用 # a 字符串化操作符)会将圆括号中的任何内容转换为字符串字面量,以从提供给宏的签名创建名称。"1"和"2"只是用来区分插槽和信号。
此前的帖子应该会为您提供更多见解。
如果您想了解这些宏和预处理的"为什么?",我建议您阅读有关"元对象编译器"或MOC的文档。为了好玩,您可以查看MOC对您提供的代码执行的操作。浏览其输出并查看其中包含的内容。这应该很有启发性。
简而言之,通过MOC进行的这种预处理允许Qt实现一些C ++不作为标准提供的功能(例如信号和插槽)。 (尽管有一些实现这个概念的,与Qt无关,不需要元对象编译器)
emit
- 它的存在仅仅是为了表达编写更具自我说明性代码的意图。 - derM