【问题标题】:ImageToggleButton, can I check if "onCheckedChanged" was called by user or programmatically?ImageToggleButton,我可以检查“onCheckedChanged”是由用户调用还是以编程方式调用?
【发布时间】:2014-05-28 09:20:47
【问题描述】:

我在 QML 中有ImageToggleButton。 我使用onCheckedChanged 来检查用户何时更改按钮状态。有时我需要从 QT 以编程方式更改“已检查”状态,但我不希望在这种情况下调用 onCheckedChanged。 不幸的是ImageToggleButton 不包含方法onClicked

是否有任何解决方案来检查onCheckedChanged 是否被用户调用?或者也许是其他解决方案。

我知道我可以使用 ImageButton 并从 QT 更改图像,但也许有正确的方法。

【问题讨论】:

  • 您可以在以编程方式更改 chechinh 状态之前断开插槽,然后恢复连接。
  • 是的,@DmitrySazonov 的提议似乎是实现这一目标的唯一方法。我还建议您创建 RAII 类来临时断开插槽。

标签: qt qml blackberry-10


【解决方案1】:

根据@Predelnik 的要求 - RAII 实施。

struct Blocker( QObject *obj )
{
  QPointer< QObject > obj;
  bool wasBlocked;

  Blocker( QObject *_obj )
    : obj( _obj )
  {
    Q_ASSERT( obj );
    wasBlocked = obj->blockSignals( true );
  }
  ~Blocker()
  {
    if ( obj )
      obj->blockSignals( wasBlocked );
  }
};

{
  // ...usage
  Blocker block( imageButton ); // will unblock signals automatically
  // do work
}// auto unblock there

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2010-09-12
    • 2011-11-17
    • 2018-09-01
    • 2018-11-18
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多