在C++业务类和QML之间创建一个数据桥梁

工作中经常会遇到两种业务直接按无法直接沟通,此时需要建立一个桥梁将两者进行联系起来,假设一个C++业务类,有一个QML UI,
如果将BridgeClass 类通过qmlRegisterType 注册到QML中,在C++中如何能够调用到BridgeClass 对象吗,在qml中的对象和C++业务中的BridgeClass 对象需要统一,如果在qml中创建了BridgeClass 对象,在C++中就不能创建BridgeClass 类对象,但是需要用到QML中创建的BridgeClass 对象,怎么能够使用呢?

代码如下仅供参考:
搭建一个桥梁代码:

class BridgeClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString data READ data NOTIFY dataChanged)
public:
    explicit BridgeClass(QObject *parent):QObject(parent){}
    QString data() const{}
public slots:
    void updateData(const QString& newData){}
signals:
    void dataChanged();
private:
    QString m_data;
};

UI QML代码

import QtQuick 2.15
import QtQuick.Window 2.15
import com.example.bridge 1.0

Window {
    visible: true
    width: 640
    height: 480
    title: "Using BridgeClass in QML and C++"

    BridgeClass {
        id: qmlBridge
        objectName: "qmlBridge"  // 设置 objectName 以便在 C++ 中查找
        onDataChanged: {
            console.log("Data changed in QML:", data)
        }
    }

    Component.onCompleted: {
        qmlBridge.updateData("New data from QML")
    }
}

在main函数中注册BridgeClass

// main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickItem>
#include <QDebug>
#include "bridgeclass.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    // 注册 BridgeClass 到 QML
    qmlRegisterType<BridgeClass>("com.example.bridge", 1, 0, "BridgeClass");

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    if (engine.rootObjects().isEmpty())
        return -1;

    // 获取 QML 的根对象
    QObject *rootObject = engine.rootObjects().first();

    // 查找 QML 中创建的 BridgeClass 对象
    QObject *qmlBridgeObject = rootObject->findChild<QObject*>("qmlBridge");
    if (qmlBridgeObject) {
        BridgeClass *bridge = qobject_cast<BridgeClass*>(qmlBridgeObject);
        if (bridge) {
            qDebug() << "Data from QML BridgeClass:" << bridge->data();
            bridge->updateData("New data from C++");
        }
    }

    return app.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值