步骤
- 定义新的类,继承自QObject
- 在类声明中定义public方法,函数定义之前加上Q_INVOKABLE关键字
- 按正常的方法写出类的实现
- 在main文件中包含该类,并加入QQmlEngine和QQmlContext等文件
- 使用智能指针QScopedPointer实例化类
- 使用engine.rootContext的setContextProperty方法将智能指针加入进应用程序中
- 在QML文件中直接调用函数即可
代码:
类头文件
class Voronoi : public QObject
{
Q_OBJECT
public:
explicit Voronoi(QObject *parent = nullptr);
Q_INVOKABLE void test();
Q_INVOKABLE double add(double x, double y);
};
类文件
void Voronoi::test()
{
qDebug()<<"hello form c++";
}
double Voronoi::add(double x, double y)
{
return x+y;
}
main文件
#include <QQmlEngine>
#include <QQmlContext>
#include "voronoi.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QScopedPointer<Voronoi> voronoi(new Voronoi);
//voronoi.data()指向智能指针中的类对象,如果voronoi是一个普通指针,则voronoi.data()改为voronoi即可
engine.rootContext()->setContextProperty("voronoi", voronoi.data());
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
QML文件
MouseArea{
anchors.fill: parent
onPressed:{
voronoi.test()
var result = voronoi.add(12.3, 3.0)
console.log(result)
}
}