当前位置: 首页 > news >正文

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

工作中经常会遇到两种业务直接按无法直接沟通,此时需要建立一个桥梁将两者进行联系起来,假设一个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();
}
http://www.xdnf.cn/news/71821.html

相关文章:

  • 机器视觉lcd屏增光片贴合应用
  • 什么是Manus,国内用户如何订阅Manus
  • FR806HA小板烧录固件
  • Vue.js进阶实践:串行请求管理与优雅中断方案
  • 内核是如何接收网络包的
  • CountAnything 如何驱动木材行业自动库存管理转型
  • 示波器探头状态诊断与维护技术指南
  • 牛行为-目标检测数据集(包括VOC格式、YOLO格式)
  • aws服务(一)S3介绍使用代码集成
  • 薪技术|0到1学会性能测试第19课-参数化技术之导入数据
  • 【第16届蓝桥杯软件赛】CB组第一次省赛
  • 高防服务器适合哪些行业使用
  • vue3 + element-plus中el-dialog对话框滚动条回到顶部
  • 地图可视化新范式:山海鲸如何让地理数据活起来
  • 火语言RPA--Ftp上传目录
  • 大模型基础
  • rk3588上完成halcon的形状模型配准以及和opencv的图像转换
  • 十三种通信接口芯片——《器件手册--通信接口芯片》
  • 蓝桥杯2024省A.成绩统计
  • Linux进程5-进程通信常见的几种方式、信号概述及分类、kill函数及命令、语法介绍
  • Linux指令合集
  • 如何评估一个需求的测试时间
  • 《TCP/IP详解 卷1:协议》之第三章:IP:网际协议
  • 报告系统状态的连续日期 mysql + pandas(连续值判断)
  • 从「+AI」到「AI+」大模型正在抹平项目管理的“人工断层”
  • 为什么RPN生成的候选框,要使用rcnn来进行分类和回归操作?
  • 编译原理实验(四)———— LR(1)分析法
  • 实验七 shell程序设计
  • python生成动态库在c++中调用
  • 【JavaEE】计算机的工作原理