Qt问题:信号和插槽如何工作?

时间:2009-09-02 16:00:21

标签: c++ qt

信号和插槽如何在高级抽象中工作?

信号和插槽如何在高级抽象中实现?

4 个答案:

答案 0 :(得分:16)

我实际上已经阅读了关于它的Qt页面,并且它很好地解释了:

http://qt-project.org/doc/qt-4.8/signalsandslots.html

答案 1 :(得分:10)

正如其他人所说,这个主题有非常好的Qt文档。如果您想知道幕后发生了什么,这些信息可能会对您有所帮助:

插槽只是常规方法。没有什么特别的,除了moc会将他们的签名保存在中间.moc文件的表中 - 当你查看这个文件时,你可以非常清楚地看到这个表。

此表允许您使用其签名调用方法。 SLOT(mySlot(int))宏归结为相关方法的字符串表示形式。有几种方法可以执行此操作,例如,请参阅QMetaObject的文档。

当您将信号连接到插槽时,信号和插槽签名将被存储以供以后使用。发射信号时,使用上述方法调用之前连接到该信号的所有插槽。

如果你想了解更多,我建议查看moc生成的代码,并逐步完成信号发射和connect()调用的内部。这里没有魔力,但有很多聪明。

答案 2 :(得分:5)

我们在你的另一个问题中有所回答

Why does Qt use its own make tool, qmake?

但是为了更详细一些,MOC会解析您的文件,寻找信号/插槽声明(以及属性和其他支持的结构),并根据这些声明生成中间代码文件。这些中间代码文件提供对库的信号和插槽的强类型访问,以用于与对象通信。

qmake生成一个makefile,它自动包含这些中间文件(以及生成的任何UI或资源文件)以及您自己的代码,以便您可以使用您选择的工具链进行构建。

答案 3 :(得分:3)