有没有办法强制更新QML中的绑定? 我使用ComboBox.currentText作为参数将Component的状态绑定到c ++函数。
state: cpp.isInSet(combobox.currentText) ? "a" : "b";
正如您可以猜到的,如果给定的文本在QSet中,则c ++函数返回true。 现在,当currentText发生变化时,这显然可以正常工作,但同时我在集合中添加或删除字符串。 当发生这种情况时,我可以发出信号,但我怎么能告诉QML组件更新它的绑定?
作为一个快速而肮脏的黑客,我刚刚做了:
property bool hack: true;
Connections { target: cpp; onSetChanged: {!hack; !hack;}
state: hack && cpp.isInSet(combobox.currentText) ? "a" : "b";
但必须有一种更好的方式,我在文档中找到它太愚蠢了。
答案 0 :(得分:1)
如果你的cpp对象有" setChanged()"你可以这样做。信号:
function checkState() {
state = cpp.isInSet(combobox.currentText) ? "a" : "b"
}
Component.onCompleted: {
cpp.setChanged.connect(checkState)
combobox.onCurrentTextChanged.connect(checkState)
}
答案 1 :(得分:1)
尝试一下
在您的cpp
中添加属性;
Q_PROPERTY(int generation READ generation NOTIFY generationChanged);
这只是一个整数。每当您要从C ++发起更改时,请更改此“世代”编号;
++_generation;
emit generationChanged();
然后在QML中,取决于gen
;
(示例)
Item
{
...
property int gen: cpp.generation;
...
state: gen, (cpp.isInSet(combobox.currentText) ? "a" : "b");
}
使用javascript逗号运算符。