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学习笔记–特定宏介绍
6、QML使用C++对象

发布了496 篇原创文章 · 获赞 601 · 访问量 155万+

猜你喜欢

转载自blog.csdn.net/qq_38880380/article/details/103836138
今日推荐