QML中调用C++函数

步骤

  • 定义新的类,继承自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 
#include 
#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)
        }
    }

你可能感兴趣的:(Qt)