如何在我的qt快速项目中将值发送main.cpp到Qml文件中
transform: Rotation {
id: needleRotation
origin.x: 5; origin.y: 65
angle: -120 + VALUE*2
}
Run Code Online (Sandbox Code Playgroud)
对于使用qt quick 2.0制作的速度表,我经常需要Cpp的值
我猜这个属性是由某个对象产生的.在这种情况下,你可以利用Q_PROPERTY(见这里).
按照我提供的链接显示,您可以按如下方式重写您的课程:
class DataProvider : public QObject
{
Q_OBJECT
Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
public:
void setValue(qreal newVal) { // <--- do your stuff to update the value
if (newVal != m_value) {
m_value = newVal;
emit valueChanged(); // <--- emit signal to notify QML!
}
}
qreal value() const {
return m_value;
}
signals:
void valueChanged(); // <--- actual signal used as notification in Q_PROPERTY
private:
qreal m_value; // <--- member value which stores the actual value
};
Run Code Online (Sandbox Code Playgroud)
这里我们value用相应的getter和setter 定义了一个属性(value和setValueresp.)setter方法发出通知信号,这是在值改变时通知QML的基础.
现在,要将对象暴露给QML(以及它的属性),只需将其注册为context property; 只需写在你的主要内容:
DataProvider data;
engine.rootContext()->setContextProperty("data", &data); // ALWAYS before setting the QML file...
Run Code Online (Sandbox Code Playgroud)
现在可以通过QML中的名称使用DataProvider实例.只需像这样重写你的QML:datadata
transform: Rotation {
id: needleRotation
origin.x: 5; origin.y: 65
angle: -120 + data.value * 2
}
Run Code Online (Sandbox Code Playgroud)
每次调用setValue()C++代码并且值发生更改时,都会发出通知并重新评估绑定.