实现思路:在C++中创建一个类,并把该类传给QML,把qml中的属性与C++类中的变量绑定
Qt之自定义属性Q_PROPERTY
Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property
Q_PROPERTY(type name
READ getFunction
[WRITE setFunction]
[RESET resetFunction]
[NOTIFY notifySignal]
[DESIGNABLE bool]
[SCRIPTABLE bool]
[STORED bool]
[USER bool]
[CONSTANT]
[FINAL])
使用Q_PROPERTY宏
.h文件中创建类。
class Test : public QObject {
Q_OBJECT
Q_PROPERTY(double pieX READ getpieX WRITE setpieX NOTIFY pieXchanged) //由于该值是会变的,所以要添加NOTIFY,在改变时会发出信号,调用pieXchanged函数。
Public:
double getpieX() const
{
return m_pieX;
}//笔的宽度
void setPieX(double pieX)
{
m_pieX = pieX;
emit pieXchanged();
}
double m_pieX;
signals:
void pieXchanged();
};
Main函数中
Text painted; //创建Text类成员
painted.setPieX(100); //改变X坐标位置
QQuickView viwer;
viwer.rootContext()->setContextProperty("position",&painted); //把该成员变量加到QML中,可在QML中通过position来调用。
viwer.setSource(QUrl("qrc:/main.qml"));
viwer.show();//将viewer设置为main.qml属性
viwer.rootContext()->setContextProperty("mainwindow",&viwer);
在QML中绑定qml的属性变量
import QtQuick 2.12
import QtQuick.Window 2.12
Rectangle
{
id:pie
width: 200
height: 200
x: position.pieX //把界面的x坐标与在main函数中设置的值绑定,在main函数中改变了该值,相对的qml中界面位置也会改变。
}