Qt / SIGNAL、SLOT、signals、slots、emit 关键字含义
生活随笔
收集整理的這篇文章主要介紹了
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根據上述代碼可知如下:
| 關鍵字 | 實際代碼 |
| signals | public |
| slots | (空) |
| emit | (空) |
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的Qt / SIGNAL、SLOT、signals、slots、emit 关键字含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript / DOM、BOM
- 下一篇: 软件工程 / 为什么基于接口而非实现编程