ImageToggleButton,我可以检查“onCheckedChanged”是由用户调用还是以编程方式调用?

Posted

技术标签:

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

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于ImageToggleButton,我可以检查“onCheckedChanged”是由用户调用还是以编程方式调用?的主要内容,如果未能解决你的问题,请参考以下文章

检查使用O_NONBLOCK打开的文件描述符是否准备就绪

是否可以检查字符是否与可能性列表匹配?

如何检查 PyObject 是不是为列表?

检查两个排序的字符串在 O(log n) 时间内是不是相等

硬盘io检查

在Java中对任何类型使用变量并检查它的类型?