我一直都是Qt程序员,现在已经有相当一段时间了,我明白了Qt的大部分特性。我仍然对连接语句在运行时如何将信号连接到插槽感到困惑。基本上我想了解编译时会发生什么,以及运行时会发生什么。QT中的信号和插槽之间的连接如何?
编译时间:元对象编译器将生成代码以在附加cpp文件(每个包含Q_OBJECT的类一个)中实现信号。
运行时间:信号被映射到一个插槽,插槽被执行?这是我不清楚的部分... SIGNAL和SLOTS是扩展为信号/槽名称的字符串表示形式的宏...在运行时这和元对象如何帮助将调用映射到槽?细节将不胜感激......
编辑: 这个链接会给你一个更好的主意。(仅如果你有兴趣在血淋淋的细节...) http://dev.libqxt.org/libqxt/wiki/Meta_Object_Format
夫妇这与文档QMetaObject和东西应该变得清晰...
谢谢对于答案..我可以看到生成在moc文件中的qt_metacall函数....但源对象的moc文件只包含关于信号的信息而非插槽......所以它如何找到插槽? – maxpayne 2011-03-14 12:19:27
如果我理解,我不确定。插槽和信号通过在MOC文件中生成的静态元对象进行注册。 MOC文件是否没有列出您的插槽?它应该,我的。这可能会让人困惑,因为信号和插槽都堆积在一起。你能否给我一个更透彻的解释,以便我能理解。 – 0xbaadf00d 2011-03-14 13:34:18