【问题标题】:Qt question: How do signals and slots work?Qt 问题:信号和槽是如何工作的?
【发布时间】:2009-09-02 16:00:21
【问题描述】:

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

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

【问题讨论】:

  • 我也对这个拼写感到很痒......天知道为什么

标签: c++ qt


【解决方案1】:

我实际上已经阅读了这个 Qt 页面,它很好地解释了:

https://doc.qt.io/qt-5/signalsandslots.html

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 很多聪明,但没有魔法!让我想起了catb.org/esr/jargon/html/magic-story.html
    • 那里有两种连接类型。第一个:在发出信号时调用槽。第二个:插槽调用被放置在事件循环队列中。可以手动选择connect中的方法,但是来自不同线程的连接信号和槽总是要排队的。
    【解决方案3】:

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

    Why does Qt use its own make tool, qmake?

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

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

    【讨论】:

      【解决方案4】:

      【讨论】:

        猜你喜欢
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        • 2017-02-06
        • 2011-01-01
        • 1970-01-01
        • 2011-06-20
        相关资源
        最近更新 更多