2016-02-04 42 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) 
}