对于程序中一些常量如字符串, 实数等, C++中经常用的方法, 是定义全局常量; 或者把所有意义相近的常量用一个单例类收集起来。

QML是类JSON的标识性语言, 使用js 语法去操作对象。 在QML中定义常量稍稍麻烦些。 总结起来, 有以下几种方法:

使用 C++   qml 混合编程时:

       可以在 C++ 中定义可读属性,或者使用 Q_INVOKABLE函数只提供get方法;  再把这个C++类暴露给QML——该方法效果同于在 QML 中使用QtObject定义不可见类。

      另一种方法是使用QQmlEngine 的register none instantable 函数簇定义不能被实例化的类型。

      qmlRegisterInterface
      qmlRegisterSingletonType

     然后在QML 使用 import 引入自定义命名空间以后,使用 Type.member 引用相关属性, 或者方法。

 另一种是 在 Python 文件中定义一个dict-lists 集合, 然后在QML中引用。 具体用法参考

      --Defining-and-using-constants-from-PySide-in-QML

上述两种方法都需要从 QqmlEngine 获取 rootContext, 并使用setContextProperty注册。

还有一种方法是 在 js 文件中定义变量, 然后在 qml中使用。

对于 list 类型, C++ 的处理方法是 使用 QQmlListProperty 封装Qlist类, 也可以封装自定义容器; 在js 和 python中, 直接给list 写入字面量即可。注意, 在使用 QQmlListProperty 时, 如果要定义 list<Fruit>, 需要定义一个 QList<Fruit*>作为 QQmlListProperty<int> 的参数传入, 但是 fruit必须是 QObject的子类。

Qml 定义 constant的更多相关文章

  1. qt 学习之路 :QML 语法

    前面我们已经见识过 QML 文档.一个 QML 文档分为 import 和对象声明两部分.如果你要使用 Qt Quick,就需要 import QtQuick 2.QML 是一种声明语言,用于描述程序 ...

  2. QtQuick多页面切换、多页面切换动画、多个qml文件数据交互

    一.QtQuick多页面切换方法 (1)“隐藏法” 前一个视图visible设为false或者透明度opacity设为0,相当于“隐藏”了,实际还存在: 要显示的视图visible设为true或者透明 ...

  3. Qt之QML开发常用知识

    小技巧: 1. QML的内部逻辑可以直接调试 2. ctrl+ alt + space,在写QML时,可以直接调出工具条 3. 属性以小写字母开发 4. 属性改变事件,基本都是on+Property+ ...

  4. qt quick中qml编程语言

    Qt QML 入门 — 使用C++定义QML类型 发表于 2013 年 3 月 11 日   注册C++类 注册可实例化的类型 注册不实例化的QML类型 附带属性 注册C++类 注册可实例化的类型 如 ...

  5. QML 与 C++ 交互

    前言 文档如是说,QML旨在通过C ++代码轻松扩展.Qt QML模块中的类使QML对象能够从C ++加载和操作,QML引擎与Qt元对象系统集成的本质使得C ++功能可以直接从QML调用.这允许开发混 ...

  6. fuelphp 问题1

    fuelphp遇到的一些小问题,写下来以防止别人遇到相同的问题,写的比较随意 1.引用到orm\model 报错:class Model_Test extends Orm\Model 报错内容:Cla ...

  7. 4.了解AngularJS模块和依赖注入

    1.模块和依赖注入概述 1.了解模块 AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块. 模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画 ...

  8. 《Effective C++ 》学习笔记——条款02

    ****************************  一. Accustoming Yourself to C++ **************************** 条款02: Pref ...

  9. QtQuick桌面应用程序开发指南 4)动态管理Note对象_B 5)加强外观 6)许多其他的改进

    4.2.2 Stateless(不管状态)JavaScript库 为了让开发轻松点, 使用一个JavaScript接口来和数据库交互是个好主意, 它在QML中提供了方便的方法; 在QtCreator中 ...

随机推荐

  1. 纯CSS实现tab选项卡切换

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta cont ...

  2. Javaweb开发中URL路径的使用

    看到博客园孤傲苍狼的web系列文章中有关于URL路径的使用文章后,感觉自己对URL的使用清楚了很多,自己再对着动手写一遍以加深记忆. JavaWeb开发中常看到URL以"/"开头, ...

  3. 基于Unity的Profiler性能分析

    A. WaitForTargetFPS:       Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间    B. Overhead:       Profiler总体时间-所有单项的记录时 ...

  4. Jstatd方式远程监控Linux下 JVM运行情况

    前言 最近一个项目部署在服务器上运行时出现了问题,经过排查发现是java内存溢出的问题,所以为了实时监控服务器java内存的情况,需要远程查看服务器上JVM内存的一些情况.另外服务器系统是CentOS ...

  5. ORM了解

    1.hibernate通过读取Hibernate.cfg.xml文件创建SessionFactory,并通过SessionFactory创建Session(开始使用要打开,使用结束要关闭);通过Ses ...

  6. 【IE6的疯狂之十】父级使用padding后子元素绝对定位的BUG

    在前端开发中,经常会用到css的position:absolute来使层浮动,前通过left,top,right等属性来对层进行定位,但ie6对left,top,right等属性的解释和ie7,ie8 ...

  7. 安装 zabbix 时遇到的一个问题

    安装 zabbix 2.0.3,到最后阶段,遇到一个问题: PHP bcmath extension missing,  php configuration parameter --enable-bc ...

  8. Firewalld防火墙

    Firewalld服务是红帽RHEL7系统中默认的防火墙管理工具,特点是拥有运行时配置与永久配置选项且能够支持动态更新以及"zone"的区域功能概念,使用图形化工具firewall ...

  9. 转:NSString什么时候用copy,什么时候用strong

    大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢? 比如: @property (retain,nonatomic) NSString *rStr; @ ...

  10. python中判断语句用两个or连接的奇葩

    学python的时候犯的一个错误,放在这吧.就是在循环某个列表的时候不要去操作它,这是容易忽略的一个地方.所以如果要操作某个列表本身,那么先把该列表copy一份,然后再读取的时候读copy的那份.操作 ...