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”是由用户调用还是以编程方式调用?的主要内容,如果未能解决你的问题,请参考以下文章