2016-02-04 78 views
0

是否有任何方法可以强制更新QML中的绑定? 我使用ComboBox.currentText作为参数,将组件的状态绑定到C++函数。依赖于C++函数的QML强制绑定更新

state: cpp.isInSet(combobox.currentText) ? "a" : "b"; 

正如你可以猜测,C++函数只是返回true,如果给定的文本是在QSet。 现在,当currentText改变时,这显然工作正常,但同时我添加或删除集合中的字符串。 当发生这种情况,我可以发出一个信号,但我怎么能告诉QML组件更新它的绑定?

作为一个快速和肮脏的黑客我只是做:

property bool hack: true; 
Connections { target: cpp; onSetChanged: {!hack; !hack;} 
state: hack && cpp.isInSet(combobox.currentText) ? "a" : "b"; 

但显然是因为我只是太傻在文档中找到一个更好的办法。

+0

是否可以通过生活在CPP到QML作为函数的参数设定?像'state:cpp.isInSet(cpp.mySet,combobox.currentText)? “a”:“b”;' –

+0

你的意思是用Q_Property宏“暴露”QSet到QML?这会比我的黑客更糟糕,这就是为什么我问我是否可以强制更新QML绑定。 – ldr

+0

对。根据情况,这是一个非常干净的解决方案。您将使用set的setXyPropertyChanged()信号触发状态更新。但如果你的情况不那么好,那还有其他的一些方法。 –

回答

0

你可以做到这一点的方式,如果你的CPP对象“setChanged()”信号:

function checkState() { 
    state = cpp.isInSet(combobox.currentText) ? "a" : "b" 
} 
Component.onCompleted: { 
    cpp.setChanged.connect(checkState) 
    combobox.onCurrentTextChanged.connect(checkState) 
}