【问题标题】:Manually call connectSlotsByName()手动调用 connectSlotsByName()
【发布时间】:2016-08-08 10:21:15
【问题描述】:

我正在试验基于设计器的 Qt 用户界面。设计器 UI 的功能之一是小部件插槽的自动连接,如果它们遵循特殊的名称模式(“on_...”)。

但是,一旦设置了 UI,似乎就建立了连接。我不希望这种情况发生。我想在加载后以编程方式修改 UI,而不会收到不必要的插槽调用。

那么,是否可以明确控制何时建立这些连接,即何时调用 connectSlotsByName()?

【问题讨论】:

    标签: c++ qt signals-slots qt-designer


    【解决方案1】:

    您可以使用QObject::blockSignals 将不必要的信号屏蔽一段时间, 像这样:

    widget->blockSignals(true);
    //do work
    widget->blockSignals(false);
    

    您也可以致电disconnect,然后致电connect 获取特定信号。

    【讨论】:

    • 这些都是很好的解决方法。谢谢。我决定完全避免使用自动功能。 (除了上述问题之外,自制连接还允许对连接进行编译时检查)。
    • 还有clang静态分析器的扩展,可以在编译时检查生成的信号/插槽连接reviews.llvm.org/D14592和独立工具github.com/etaoins/qconnectlint
    猜你喜欢
    • 1970-01-01
    • 2013-08-17
    • 2015-11-20
    • 2015-08-04
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多