【问题标题】:Best practice for QT updating values signals/slotsQT 更新值信号/槽的最佳实践
【发布时间】:2023-03-28 17:02:01
【问题描述】:

您认为设计用于更新类中成员值的信号/槽交互的最佳实践是什么?

例如,考虑一个在 UI 上表示的成员变量。 用户更改 UI 中的值。 存在信号/槽关系,通过成员变量更新函数自动更新成员变量。

我们还希望在 UI 上自动更新对成员变量的更改,因此存在另一种信号/槽关系。在通过 update 函数更新成员变量时,一个信号会触发 UI 被更新。

你如何防止这些变成循环? 是否像调用成员变量更新函数时检查新值与当前值一样简单,如果有差异则只发送信号更新UI?

或者...有没有更优雅的方式来做到这一点?

【问题讨论】:

  • 也许你应该考虑 Q_PROPERTY 和 NOTIFY。

标签: qt signals slot


【解决方案1】:

你如何防止这些变成循环?是否像调用成员变量更新函数时检查新值与当前值一样简单,如果有差异则只发送信号更新UI?

是的。

从实用的角度讲,这允许您连接,例如,QDial、QSpinBox 和 QSlider 并使它们保持同步,而无需您做额外的魔法来防止无限循环。

从语义上讲,你有没有注意到值改变时的典型信号叫做valueChanged

void myClass::setValue(int value) {
    if (m_value != value) {
        m_value = value;
        emit valueChanged(value); // YES, THE VALUE *DID* CHANGE!
    }
}

这意味着如果值没有变化,则不应发出信号,如果您尝试将值设置为当前值,则会发生这种情况 - 通过直接设置或通过信号/插槽设置调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多