/**
LogicProcessor.h
#ifndef LOGICPROCESSOR_H
#define LOGICPROCESSOR_H
#include <QObject>
#include <QTimer>
class LogicProcessor
        : public QObject
{
    Q_OBJECT
public:
    LogicProcessor();
    // \brief  计算两个整数的加运算
    // \retval 返回运算后的数据
    Q_INVOKABLE QString machining(const int num, const int num2);
signals:
    // \brief  Qml发送请求测试C++接收信号
    // \param  Qml输入数据
    Q_INVOKABLE void requestCppPrintSignal(const QVariant&);
    // \brief  C++发送Ping请求到Qml的测试信号
    // \param  Qml输入数据
    Q_INVOKABLE void cppPingQmlSignal(const QString& param);
private slots:
    // \brief  C++发送Ping请求到Qml的测试处理槽方法
    // \param  Qml输入数据
    void requestCppPrintSlot(const QVariant&);
    // \brief  C++发送Ping请求到Qml的测试信号
    void timeoutPingQmlSlot();
private:
    QTimer m_tm;
};
#endif // LOGICPROCESSOR_H
*/
/**
LogicProcessor.cpp
#include "logicprocessor.h"
#include <QDebug>
LogicProcessor::LogicProcessor()
{
    connect(this,SIGNAL(requestCppPrintSignal(const QVariant&)),this,SLOT(requestCppPrintSlot(const QVariant&)));
    connect(&m_tm,SIGNAL(timeout()), this, SLOT(timeoutPingQmlSlot()));
    m_tm.setInterval(std::chrono::milliseconds(1000));
    m_tm.start();
}
QString LogicProcessor::machining(const int num, const int num2)
{
    return QString::number(num + num2);
}
void LogicProcessor::requestCppPrintSlot(const QVariant & var)
{
    qDebug() << __func__ << " Cpp 输出 " << var;
}
void LogicProcessor::timeoutPingQmlSlot()
{
    emit cppPingQmlSignal("来自Cpp的问候 >> Hello World");
    m_tm.stop();
}
*/
/**
main.cpp
#include <QtQml>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "logicprocessor.h"
int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);
    LogicProcessor logic_object;
    QQmlApplicationEngine engine;
    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.rootContext()->setContextProperty("logic_object", &logic_object);
    engine.load(url);
    return app.exec();
}
*/
/**
main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    Button {
        id: trigger
        width: 100
        height: 30
        text: "10 + 10 ="
        onClicked: {
            // Qml发送请求测试C++数据接收
            logic_object.requestCppPrintSignal("Qml Send Message: Hell word")
            // 调用C++ API
            logic_result.text = logic_object.machining(10,10)
        }
    }
    Text {
        anchors.left: trigger.right
        id: logic_result
        text: qsTr("null")
    }
    function print_ping(str) {
        console.log("QML >> " + str)
    }
    Component.onCompleted: {
        // 连接C++类信号
        logic_object.cppPingQmlSignal.connect(print_ping)
    }
}
*/
总结
- C++中的- API如果会被- QML调用时,需要在- API前置声明部分使用 Q_INVOKABLE 关键之标注 >>- Q_INVOKABLE [return_type] [function_name] ([param...]);
  作者:
  怪小子
  Github: 
  https://github.com/MrSunHua
  邮箱:sh4a01@163.com
本文版权归作者和博客园共有,欢迎转载,如文章有版权冲突或者有更好的见解及建议,还望联系博主讨论并修改。 
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号