使用Qml编程时,常常会与Qt之间进行数据访问或修改,本篇文章是介绍Qt与Qml的数据交互方法,一般有两种方法。#ifndef TESTMODEL_H TestModel头文件 #include <QGuiApplication> main函数 1. 使用qmlRegisterType注册到qml (1) 例: qmlRegisterType<TestModel>("TestModel", 1, 0, "TestModel"); (2) qml中使用方法: TestModel { id: test } (2) 通过qml创建控件一样创建实例来访问或修改数据; (3) TestModel为继承QObject的C++对象,通过访问或修改TestModel的text来达到程序的目的。 2. 使用setContextProperty方法设置qml全局访问属性 (1) 例: QQmlApplicationEngine engine; (2) qml中使用方法: <1> qml文件执行导入命令 import TestModel 1.0 <2> 使用 Column { (3) 在程序创建qml资源时设置全局访问对象"testModel", 示例的字符串首字母只能下或线或者是小写。 3. 数据的交互(修改与访问) (1) 它们的数据交互通过Q_PROPERTY宏定义实现 Q_PROPERTY(QString text READ text WRITE setText NOTIFY statusChanged) (2) 当qml访问数据(调用testModel.text)时,Qt端则会调用text函数返回一个值。这里测试程序是: QString text() { return "test"; } (3) 当需要修改数据时候(调用testModel.text="123")时,Qt端则会调用setText设置相应的行为。这里测试程序是: void setText(QString text) { (4) 由于Q_PROPERTY宏定义类statusChanged信号,当用于发送statusChanged信号时,text()函数则会自动调用,从而刷新text的值(这里测试程序返回了固定值"123")。如果text函数返回的是m_text,这是setText设置的值。 QString text() { return m_text; } 4. 两种方法的区别 (1) 方法1需要创建实例才能使用,而方法2则是只有一个全局实例,在setContextProperty就已经创建了; (2) 方法1学要在qml的import导入, 如下例(TestModel为注册的字符串,1.0为注册定义的版本号); import TestModel 1.0 (3) 方法1生命周期在本页面,方法2生命周期是全局; ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:你才小学生,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |