一.前言
楼主在学习QML过程中,发码QML是可以调用C++,但是形式好像是很多,楼主一开始也没有搞懂很多,先记录分享最简单的调用例子,后续再由浅入深
二.调用过程
1.新建c++类
2.编写简单的,这样函数声明前要加Q_INVOKABLE ,或者声明为public slots,不然会无法调用
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = nullptr);
Q_INVOKABLE void getMsg(QString msg1,QString msg2);
Q_INVOKABLE int add(int a,int b);
Q_INVOKABLE void printMsg();
public slots:
};
#endif // MYOBJECT_H
函数实现
#include "MyObject.h"
#include <QDebug>
MyObject::MyObject(QObject *parent) : QObject(parent)
{
}
void MyObject::getMsg(QString msg1,QString msg2)
{
QString msg =QString("%1:%2").arg(msg1).arg(msg2);
qDebug()<<"合并之后的字符串:"<<msg;
}
int MyObject::add(int a,int b)
{
return a+b;
}
void MyObject::printMsg()
{
qDebug()<<"QML调用C++实例";
}
3.调用
3.1main.cpp中注册C++类(记得包含自定义的C++类以及QQmlContext,不然会报错)
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "MyObject.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/CallJsDemo.qml")));
// 实例化一个类,遵循C++类调用的原则,调用之前先实例化
MyObject my;
// 将这个 C++ 实例注册到 Qml 引擎 “myObject”为在QML中调用的名称
engine.rootContext()->setContextProperty("myObject",&my);
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
3.2QML调用
Button{
id:btn_3
text: "调用C++类"
font.family: "微软雅黑"
onClicked: {
myObject.printMsg()
console.log(myObject.add(12,33))
myObject.getMsg("我是","帅哥")
}
}
至此,QML简单调用C++完成!!