qml全局变量定义建议

从C++导入到qml的全局变量和qml定义变量或许有些混淆,使用下列建议或许可以解决全局变量混淆的问题。

  定义qml变量相当于定义JavaScript变量。JavaScript变量命名必须以字母,_$为开头。其他字符可以是字母,_$,数字

建议

  全局变量或外部变量可以使用$修饰变量。

例子

  • 设置导入$message变量到qml中:
...
engine.rootContext()->setContextProperty("$message", "hello world!");
...
  • qml使用:
...
Component.onCompleted: console.log($message)
...
  • 另外qml的全局变量(外部变量)也可以这样定义:
/* BaseItem.qml */
Item {
    property variant $message: "hello world!" 
    ...
}

  引用BaseItem.qml的全局变量(外部变量)$message

BaseItem {
    ...
    Component.onCompleted: console.log($message)	
    ...
}
要在QML中增加一个存取全局变量的C++类接口,你需要使用Qt的元对象系统。具体的步骤如下: 1. 定义一个C++类,该类必须继承自QObject,并声明为Q_OBJECT宏。 ```cpp #include <QObject> class GlobalVariable : public QObject { Q_OBJECT public: explicit GlobalVariable(QObject *parent = nullptr); public slots: QVariant getValue(const QString &key) const; void setValue(const QString &key, const QVariant &value); private: QMap<QString, QVariant> m_data; }; ``` 2. 在QML中注册该C++类,以便在QML中使用该类。 ```cpp #include <QtQml> qmlRegisterType<GlobalVariable>("com.example", 1, 0, "GlobalVariable"); ``` 3. 在QML中使用该类。 ```qml import com.example 1.0 property GlobalVariable globalVariable Text { text: globalVariable.getValue("username") } ``` 4. 解析JSON数据,并将解析的实时变量赋值给定义的C++类接口。 ```cpp void parseJsonData(const QByteArray &jsonData, GlobalVariable *globalVariable) { QJsonObject jsonObject = QJsonDocument::fromJson(jsonData).object(); for (const QString &key : jsonObject.keys()) { globalVariable->setValue(key, jsonObject.value(key).toVariant()); } } ``` 在上述代码中,我们定义了一个名为GlobalVariable的C++类,该类包含两个公共的槽函数:getValue和setValue。getValue函数用于获取指定键的值,setValue函数用于设置指定键的值。在setValue函数中,我们将键值对存储在QMap中。我们还在QML中注册了该类,以便在QML中使用它。在QML中,我们通过创建一个名为globalVariable的属性来获取该类的实例,并使用getValue函数来获取指定键的值。 当你解析JSON数据时,你可以使用setValue函数将解析的值存储在GlobalVariable类的实例中。这样,在QML中,你就可以使用getValue函数来获取最新的变量值了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值