Qt ImageToggleButton,是否可以检查;一旦选中“更改”;是由用户调用的还是通过编程调用的?

Qt ImageToggleButton,是否可以检查;一旦选中“更改”;是由用户调用的还是通过编程调用的?,qt,qml,blackberry-10,Qt,Qml,Blackberry 10,我在QML中有ImageToggleButton。 我使用onCheckedChanged检查用户何时更改按钮状态。有时我需要从QT以编程方式更改“Checked”状态,但我不希望在本例中调用onCheckedChanged。 不幸的是,ImageToggleButton不包含单击的方法 是否有任何解决方案来检查用户是否调用了onCheckedChanged?或者其他解决方案 我知道我可以使用ImageButton从QT更改图像,但可能有一种正确的方法。根据@Predelnik-RAII实现的要

我在QML中有
ImageToggleButton
。 我使用
onCheckedChanged
检查用户何时更改按钮状态。有时我需要从QT以编程方式更改“Checked”状态,但我不希望在本例中调用
onCheckedChanged
。 不幸的是,
ImageToggleButton
不包含单击的方法

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


我知道我可以使用
ImageButton
从QT更改图像,但可能有一种正确的方法。

根据@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
结构拦截器(QObject*obj) { QPointerobj; 布尔被封锁; 拦截器(QObject*_obj) :obj(_obj) { Q_断言(obj); wasBlocked=obj->blockSignals(真); } ~Blocker() { 如果(obj) obj->阻塞信号(wasBlocked); } }; { //…用法 阻塞器阻塞(imageButton);//将自动解除阻塞信号 //工作 }//自动解锁
您可以在以编程方式更改chechinh状态之前断开插槽,然后恢复连接。是的,@DmitrySazonov提出的方法似乎是实现这一点的唯一方法。我还建议您创建用于临时断开插槽的RAII类。