Qt / SIGNAL、SLOT、signals、slots、emit 关键字含义

一、SIGNAL、SLOT

源码路径:/home/(name)/Qt5.14.2/5.14.2/Src/qtbase/src/corelib/kernel/qobjectdefs.h

Q_CORE_EXPORT const char *qFlagLocation(const char *method);
#ifndef QT_NO_META_MACROS#ifndef QT_NO_DEBUG     // Debug#define QLOCATION "\0" __FILE__ ":" QT_STRINGIFY(__LINE__)#ifndef QT_NO_KEYWORDS#define METHOD(a) qFlagLocation("0" #a QLOCATION)#endif#define SLOT(a) qFlagLocation("1" #a QLOCATION)#define SIGNAL(a) qFlagLocation("2" #a QLOCATION)#else                   // Release#ifndef QT_NO_KEYWORDS#define METHOD(a) "0" #a#endif#define SLOT(a) "1" #a#define SIGNAL(a) "2" #a#endif#define QMETHOD_CODE  0                        // member type codes#define QSLOT_CODE    1#define QSIGNAL_CODE  2
#endif // QT_NO_META_MACROS

由上述代码可知,关键字 SIGNAL 和 SLOT 实际上是两个宏,其功能均是将信号函数和槽函数字符串化并在前面加上标识符:1或者2,以用来区分槽和信号。

在 Debug 模式下,上述字符串中还会加入文件名行号,用以在信号槽出错时输出响应的调试信息。

二、signals、slots、emit

源码路径:/home/(name)/Qt5.14.2/5.14.2/Src/qtbase/tests/auto/tools/moc/no-keywords.h

#define signals Q_SIGNALS
#define slots Q_SLOTS
#define emit Q_EMIT

源码路径:/home/(name)/Qt5.14.2/5.14.2/Src/qtbase/src/corelib/kernel/qobjectdefs.h 

#ifndef QT_ANNOTATE_ACCESS_SPECIFIER#define QT_ANNOTATE_ACCESS_SPECIFIER(x)
#endif
...
#define Q_SLOTS QT_ANNOTATE_ACCESS_SPECIFIER(qt_slot)
#define Q_SIGNALS public QT_ANNOTATE_ACCESS_SPECIFIER(qt_signal)
#define Q_EMIT

根据上述代码可知如下:

关键字实际代码
signalspublic
slots(空)
emit(空)

(SAW:Game Over!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部