我工作上的一个最大似然的项目。 在UI我的工作,我需要两个更新滑C++和阅读目前的价值为C++从最大似然. 属性似乎是正确的解决方案。 迄今为止我读不同的问题,所以没有取得成功 的两个办法结合C++模式在最大似然, 改变的性质不触发器的信号,等等...在我的代码目前,我宣布一个属于我的C++类
class MyClass : public QObject {
Q_OBJECT
public:
MyClass(QObject*);
Q_PROPERTY(double myValue READ getMyValue WRITE setMyValue NOTIFY myValueChanged)
void setMyValue(double n) {
std::cerr << "myValue being update: " << n << "\n";
myValue = n;
}
double myValue = 30;
...
}
和暴露的成脱通过一个单一实例
qmlRegisterSingletonInstance("com.me.test", 1, 0, "MyClass", &myClass);
然后开C++财产的一个最大似然滑
import com.me.test
ApplicationWindow {
Slider {
id: slider
height: 30
width: 100
from: 0
to: 100
value: myClass.myValue
onValueChanged {
console.log("value = " + value)
console.log("myClass.myValue = " + myClass.myValue)
}
/* Doesn't help
Binding {
target: slider
property: "value"
value: myClass.myValue
}*/
}
}
结合,似乎工作。 我可以修改的价值 myValue
然后这些的 myValueChanged
做出最大似然更新它的滑块。 但是鉴于 myClass.myValue
为界 slider.value
. 我假定这两个值得到更新,在同一时间。 但是拖着滑动显示,他们有不同的价值观。 以下这是什么印在控制台上的时候我将我的滑块。
qml: value = 19.863013698630137
qml: myClass.myValue = 30
此外 setMyValue
似乎不是被称为除非一个明确的分配是这样做 myClass.myValue = 0
. 我也试过结合的成分没有成功。 为什么是这种情况下,我可以使用C++财产的更新,每当我拖滑块?
脱:6.2.1
编译器:铛/海湾合作委员会
OS:Windows/Linux
更新:经测试反向的结合。 仍然打印同样的结果
import com.me.test
ApplicationWindow {
Slider {
id: slider
height: 30
width: 100
from: 0
to: 100
value: myClass.myValue
onValueChanged {
console.log("value = " + value)
console.log("myClass.myValue = " + myClass.myValue)
}
Binding {
target: myClass
property: "myValue"
value: slider.value
}
}
}
myClass.myValue
将更新,并将其火myValueChanged
?