有没有办法强制更新 QML 中的绑定(bind)? 我使用 ComboBox.currentText 作为参数将组件的状态绑定(bind)到 C++ 函数。
state: cpp.isInSet(combobox.currentText) ? "a" : "b";
如您所料,如果给定的文本在 QSet 中,则 c++ 函数只会返回 true。 现在这显然在 currentText 更改时工作正常,但与此同时我从集合中添加或删除字符串。 当这种情况发生时我当然可以发出信号,但是我如何告诉 QML 组件更新它的绑定(bind)?
作为一个快速而肮脏的 hack,我刚刚做了:
property bool hack: true;
Connections { target: cpp; onSetChanged: {!hack; !hack;}
state: hack && cpp.isInSet(combobox.currentText) ? "a" : "b";
但必须有一个更好的方法,我太愚蠢了,无法在文档中找到。
最佳答案
试试这个,
在你的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 逗号运算符。
关于c++ - 依赖于 C++ 函数的 QML 强制绑定(bind)更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213818/