QML笔记(九)之QML调用C++(1)

一.前言
楼主在学习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++完成!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值