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

QML学习笔记(四十四)QML与C++交互:对QML对象设置objectName

前言

上一节介绍了将C++类对象属性暴露给QML端,使qml端可以通过暴露名称,直接调用该类的接口。
而再介绍其他方法之前,先反过来介绍C++端主动获取QML端组件属性的方法,以此来打通双向的交互。
本节介绍的,是通过对QML的组件对象,设置一个对象名objectName,这个东西类似于id,可以在c++端通过对象名查找,查找到具体的object对象。

一、QML 里给组件起名字

Rectangle {id: camRectobjectName: "videoRect"      // C++ 找它用的句柄width: 640height: 480
}

类似这样,在常规的设置组件时,给它添加一个objectName属性。

二、C++ 里找到对象

// 假设 engine 已经 load 完 QML
QObject *rectObj = engine.rootObjects().first()->findChild<QObject*>("videoRect");
if (!rectObj) return;// 读属性
int w = rectObj->property("width").toInt();
int h = rectObj->property("height").toInt();
qDebug() << "宽高" << w << h;// 写属性
rectObj->setProperty("width", 800);

之后,我们对engine通过findChild的方式,查找到对应对象名的QObject。当然,这有可能是空的,要注意判断。
之后,就可以通过property接口读取到它的属性。你甚至可以设置属性,以此开改变qml中组件的属性值。

三、若 QML 自己声明了 函数 或 信号 同样可调

QVariant ret;
QMetaObject::invokeMethod(rectObj, "mapToGlobal",Q_RETURN_ARG(QVariant, ret),Q_ARG(QVariant, QPointF(10, 10)));

如果这个组件中声明和函数或信号,还可以直接调用源对象的invokeMethod接口,来进行接口的调用。

四、总结

至此,我们C++端应该具备基本的,主动获取qml端信息的能力了。

http://www.dtcms.com/a/512150.html

相关文章:

  • 网站制作全包多少钱演出票务网站建设
  • 用 Go 手搓一个 NTP 服务:从“时间混乱“到“精准同步“的奇幻之旅
  • 如何设计一个高并发系统?
  • 仓颉语言核心技术全解析与实战教程
  • 【多维聚类算法】RQ-Kmeans 利用残差信息 捕捉细节特征
  • 【代码随想录算法训练营——Day44】动态规划——1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列
  • 北住房和城乡建设厅网站亦庄建设局网站
  • 做生鲜食品最好的网站深圳网站建设犀牛云
  • Spring—容器
  • 汉南公司网站建设山东定制版网站建设公司
  • .NET WinForms + WPF 综合学习路线:从传统到现代的.NET桌面开发
  • 怀柔做网站设计师网上接单被骗
  • Go语言实战:入门篇-4:与数据库、redis、消息队列、API
  • Go语言:一文学搞懂核心函数“make”
  • 什么网站是教做纸工的测量为什么要建站
  • 徐州专业做网站的提高自己网站
  • FFmpeg--FlvPaser源码解析
  • html+js 实现生活缴费页面模板
  • Linux小课堂: 定时与延时执行机制之date、at、sleep 与 crontab 的深度解析
  • Linux第二弹
  • 【VSCode中git管理工具】无法初始化仓库
  • 二手房网站建设自己学习建设网站
  • 网站模板找超速云建站自动化毕设题目网站开发
  • Web原生架构如何优化数据库权限管理:简化操作与增强安全性
  • HashMap扩容过程是什么?怎么解决哈希冲突?
  • OpenSSH 安全配置核心概念解析
  • TCL华星t8项目正式开工,总投资额约295亿元
  • 营销网站制作信ls15227微信网站建设公司首选
  • 新手指南:如何在悟空AI CRM中创建和管理客户
  • 网站建设來选宙斯站长网站建设运营合同范本