QML与C++通信——Q_INVOKABLE方法

 //experimentrun.h文件

#ifndef EXPERIMENTRUN_H
#define EXPERIMENTRUN_H

#include <QObject>
#include <QQuickItem>
#include <QWidget>

class ExperimentRun : public QObject
{
    Q_OBJECT
public:
    explicit ExperimentRun(QObject *parent = nullptr);

    Q_INVOKABLE void init();      //这是experimentrun.h文件内容   必须加Q_INVOKABLE
    
signals:

};

#endif // EXPERIMENTRUN_H

//experimentrun.cpp文件 

#include "experimentrun.h"
#include <QDebug>
ExperimentRun::ExperimentRun(QObject *parent) : QObject(parent)
{

}

void ExperimentRun::init()
{
    qDebug()<<"你是谁";
}

//这是 experimentrun.cpp 里面的内容 用于qml文件调用init()函数里面的打印

 

//main.cpp文件

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "experimentrun.h"                //引入c++头文件
int main(int argc, char *argv[])
{
//    qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;


    //其中  Type:要注册的C++类型名称。            <ExperimentRun>
            uri:用于标识该类型的命名空间URI.      "ExperimentRun"
            majorVersion:主版本号                1
            minorVersion:次版本号。              0
            qmIName:在QML中使用的类型名称。       "ExperimentRun"
    qmlRegisterType<ExperimentRun>("ExperimentRun", 1, 0, "ExperimentRun");



    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

 

//main.qml文件

import QtQuick 2.12
import QtQuick.Window 2.12

import ExperimentRun 1.0        //调用刚刚注册c++文件

Window {
    id: window
    visible: true
    width: 800
    height: 500
    title: qsTr("NucleicAcidExtract")


    ExperimentRun{                //实例化一下
        id: myInstance
    }

    // 按钮触发C++函数    点击按钮触发打印函数
    Button {    
        text: "Call C++ Function"
        onClicked: myInstance.init()
    }

        

下面是QML文件和C++文件通信效果      【有用的话,给我点个赞吧】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值