C++中修改QML属性变量

实现思路:在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中界面位置也会改变。

}

猜你喜欢

转载自blog.csdn.net/liujing_sy/article/details/101033141
今日推荐