Qt 5.12学习笔记--QML and C++ 混编示例
程序员文章站
2022-07-12 15:34:46
...
Qt 5.12学习笔记--QML and C++ 混编示例
1 简介
QML被设计为可通过C ++代码轻松扩展。 Qt QML模块中的类允许从C ++加载和处理QML对象,并且QML引擎与Qt的元对象系统集成的性质使C ++功能可以直接从QML调用。 这允许开发混合应用程序,该混合应用程序将QML,JavaScript和C ++代码混合在一起实现。
2 暴露Qt C++的对象或类型给QML
2.1 创建需要暴露给QML的数据类型
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QObject>
#include <QString>
class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(QString myString READ myString WRITE setmyString NOTIFY myStringChanged)
public:
explicit MyClass(QObject *parent = 0);
Q_INVOKABLE QString getMyString();
signals:
void myStringChanged();
public slots:
void setmyString(QString aString);
QString myString();
private:
QString m_string;
};
#endif // MYCLASS_H
若你想数据元素中的方法可以被QML直接调用有2种方法:
- 在函数申明前添加 Q_INVOKABLE 宏。
- 申明成public slots。
QML可以直接访问改数据元素的属性,该属性由QPROPERTY所申明。
2.2 暴露已存在的Qt C++对象给QML
//main.cpp
MyClass myObj;
QDeclarativeEngine *engine=viewer.engine();
QDeclarativeContext *context=engine->rootContext();
context->setContextProperty("myObjectExposeByCXProperty", &myObj);
qml中可以直接使用myObjectExposeByCxProperty对象。
//mainpage.qml
...
Button{
...
id:btn1
...
text: qsTr("PROPERTY")
//此处调用myString为MyClass的QPROPERTY的属性不是方法,所以没有括号。
onClicked: label.text=myObjectExposeByCXProperty.myString;
}
3
参考
1、Qt 5.12学习笔记–QML and C++ 混编概述
2、Overview - QML and C++ Integration
3、QT开发(六十九)——QML与C++混合编程
4、【QML与C++混合编程】用QVariantList传递数组类型成员
5、Qt 5.12学习笔记–特定宏介绍
上一篇: c++笔记----this指针