c++ - 依赖于 C++ 函数的 QML 强制绑定(bind)更新

标签 c++ qml

有没有办法强制更新 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/

相关文章:

c++ - 如何避免此代码中的堆栈溢出,(递归函数)

c++ - 如何从另一个进程的调用堆栈地址中检索函数名称

c++ - MFC - 如何从菜单主机调用对话框

javascript - 如何检查 JSON 对象参数是否存在?

c++ - 如何使用 C++ API 获取 QML 对象的 id 属性

c++ - qml 和 c++ 与 qt quick 2 应用程序

qt - 如何访问通过 Loader 加载的 qml 页面的公共(public)属性?

C++ - 如何找到矩阵的等级

c# - 使用 dot net 或任何其他语言在内存中进行 ghostscript 转换

javascript - 无法在 QML 中创建 map 数据类型吗?