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中界面位置也会改变。

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QML 访问 C++ 单例类的成员变量也很简单,只需要在 C++ 添加对应的 Q_PROPERTY,并在 QML 将单例类绑定到一个对象上即可。 例如,如果想在 QML 访问名为 `myProperty` 的成员变量,可以在 MySingleton 类添加以下代码: ```cpp class MySingleton : public QObject { Q_OBJECT Q_PROPERTY(int myProperty READ myProperty WRITE setMyProperty NOTIFY myPropertyChanged) public: static MySingleton* instance() { static MySingleton* instance = new MySingleton(); return instance; } int myProperty() const { return m_myProperty; } void setMyProperty(int value) { if (value != m_myProperty) { m_myProperty = value; emit myPropertyChanged(); } } signals: void mySignal(); void myPropertyChanged(); private: MySingleton() {} int m_myProperty; }; ``` 然后在 main.cpp 注册 QML 类型: ```cpp qmlRegisterSingletonType<MySingleton>("com.example", 1, 0, "MySingleton", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * { Q_UNUSED(engine) Q_UNUSED(scriptEngine) return MySingleton::instance(); }); ``` 最后在 QML 绑定对象并访问成员变量: ```qml import com.example 1.0 Item { MySingleton { id: mySingleton } Text { text: "My property: " + mySingleton.myProperty } Button { text: "Set property" onClicked: { mySingleton.myProperty = 42 } } } ``` 这样就可以在 QML 访问 C++ 单例类的成员变量了。注意,需要在 QML 使用 `MySingleton {}` 创建一个对象,并将其绑定到一个 ID 上,才能访问其成员变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值