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

【qml-7】qml与c++交互(自动补全提示)

背景:

【qml-5】qml与c++交互(类型单例)

之前记录过qml与c++交互的方式,目前为止我使用的是“类型单例”方式。这些名字是我自己起的,只为说明问题,严谨的还是以手册为准。

“类型单例”方式时提到过自动补全提示问题,就如前置声明和头文件一样,需要注册类型,所以以前我是这样做的:

    qmlRegisterType<CppGrid>("CppGrid", 1, 0, "CppGrid");qmlRegisterSingletonInstance("CppGrid", 1, 0, "CppGrid", CppGrid::instance());

最早的时候我每写一个类,都会给它注册一个单独的uri,用于qml的import。后来发现有时候即使注册了类型也不能补全提示。

我的初衷是,要心情愉悦地写qml,就一定要解决自动补全提示的问题,每次在类型名后面打点必须给出提示。网上搜了一堆,一个比一个麻烦,我就是要简洁,不修改cmake,不用qmldir和目录,除了简单加极少代码其它一概不用,只改涉及一处,好维护好理解。

所以开始研究。

URI:

这个用于qml import的uri,后来我想干脆都用一个算了,因为目前的项目规模有限,分太细没必要,书写繁琐,所以后来都用“Cpp”取代了。

注册函数:

以前像上面那样使用注册函数,初衷就是为了简洁好管理。

但终归发现注册类型和单例同时存在会有问题,因为使用了同一个模块(uri),又用同一个类型名,它就有可能不稳定。总之就是不建议一起用。

所以查询了AI和手册,最终确定了更简洁的用法:

    qmlRegisterSingletonType<CppGrid>("CppSingleton", 1, 0, "CppGrid",[](QQmlEngine*, QJSEngine*) { return CppGrid::instance(); });

凡是需要单例注册的,就这样一行即可。导入时只需要import CppSingleton,再使用CppGrid打点时,一定会出现补全提示。

项目中我还做了一个分页组件,需要qml和c++协作,所以它专属的CppPage类型,我没有使用单例,而是类型注册,因为需要每个调用它的ui有独立的信号槽,就必须每个ui实例化。所以目前只有这个是使用类型注册的。

    qmlRegisterType<CppPage>("CppType", 1, 0, "CppPage");

uri就用“CppType”吧,以后有其它需要类型注册的,也用这个名字,不分太细了,累。

总结:

本次记录的目的,就是因为曾遇到了补全提示不正常的情况,一定要搞定它,写qml才舒服。

本文完。

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

相关文章:

  • mac m4执行nvm install 14.19.1报错,安装低版本node报错解决
  • 微服务保护和分布式事务-01.雪崩问题-原因分析
  • LeetCode-279. 完全平方数
  • 楼宇自控系统应需而生为现代建筑装上智能化翅膀
  • 【论文阅读】CLIP: 从自然语言监督中学习可迁移的视觉模型
  • 移动端网页调试实战,iOS WebKit Debug Proxy 的应用与替代方案
  • 《口令猜测研究进展》——论文阅读
  • springboot连接不上redis,但是redis客户端是能连接上的
  • ⸢ 贰 ⸥ ⤳ 安全架构:数字银行安全体系规划
  • iOS混淆工具实战,社交类 App 的隐私与安全防护混淆流程
  • 【C++详解】用哈希表封装实现myunordered_map和 myunordered_set
  • Redis 保证数据不丢失
  • 系统架构设计师备考第10天——网络技术-局域网以太网
  • [n8n] 全文检索(FTS)集成 | Mermaid图表生成
  • 基于django的梧桐山水智慧旅游平台设计与开发(代码+数据库+LW)
  • [p2p-Magnet] docs | HTTP API与Web界面 | 搜索查询引擎
  • OpenAI重组受阻:微软“锁链”与生态博弈
  • [p2p-Magnet] 数据模型(GORM) | DHT爬虫 | 分类器
  • 华为云OBS+HMS+EMRonEC2+HiveSparkFlink+GaussDB
  • GaussDB 修改schema属主时报:must be member of role “dtest“
  • 架构设计模式七大原则
  • 如何将iPhone上的隐藏照片传输到电脑
  • 零基础开发应用:cpolar+Appsmith平民化方案
  • AbpVnext 阿里云ssl证书多个生产环境自动更新
  • 观远BI仪表板智能洞察场景实战:如何破解门店销售、渠道转化与经营分析难题
  • 用React写一个技能冷却的案例,关于节流
  • C++《哈希表》
  • Day16_【机器学习常见术语】
  • Qt自定义聊天消息控件ChatMessage:初步实现仿微信聊天界面
  • Python 数据分析学习笔记:Pandas 逻辑运算