当前位置: 首页> 游戏> 攻略 > 上海开发app公司_苏州政府网站_网页制作的软件_企业网站推广

上海开发app公司_苏州政府网站_网页制作的软件_企业网站推广

时间:2025/7/29 11:40:14来源:https://blog.csdn.net/Stone_OverLooking/article/details/146107690 浏览次数:0次
上海开发app公司_苏州政府网站_网页制作的软件_企业网站推广

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

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

class BridgeClass : public QObject
{Q_OBJECTQ_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.0Window {visible: truewidth: 640height: 480title: "Using BridgeClass in QML and C++"BridgeClass {id: qmlBridgeobjectName: "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 到 QMLqmlRegisterType<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();
}
关键字:上海开发app公司_苏州政府网站_网页制作的软件_企业网站推广

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: