文档章节

qml与C++(qml访问c++对象的属性和方法)

TemetNosce
 TemetNosce
发布于 2017/04/03 15:02
字数 375
阅读 123
收藏 0

##QML访问C++概述 Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号、槽函数、枚举类型、属性、成员函数等。 ##如何实现可以被QML访问的C++类

QML访问C++需要将c++类扩展到qml中,有两个方法:一是在Qt元对象系统中注册C++类到qml中。二是将对象或数据暴露给 QML。 相关函数

setContextProperty()//将对象或数据暴露给 QML
qmlRegisterType()//注册C++类到qml中
qmlRegisterSingletonType()//注册C++单例到qml中

##如何实现可以被QML访问的C++类的属性和方法 必须满足两个条件:一是派生自QObject类或QObject类的子类,二是使用Q_OBJECT宏。QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。这样一个类才能够进入 Qt 强大的元对象系统(meta-object system)中,只有使用元对象系统,一个类的某些方法或属性才可能通过字符串形式的名字来调用,才具有了在 QML 中访问的基础条件。

##访问属性和方法

  • 1信号与槽 可以直接访问
  • 2枚举类型 使用Q_ENUMS()宏
  • 3属性 使用Q_PROPERTY()宏
  • 4方法 使用Q_INVOKABLE()宏

© 著作权归作者所有

TemetNosce
粉丝 1
博文 48
码字总数 24514
作品 0
成都
程序员
私信 提问
QML入门教程之 Hello world

QML是什么? QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制。 它结合了QtDesigner UI和QtScript的优点。QtDesig...

红薯
2011/06/02
967
0
qml component is not ready

困扰很久的Component is not ready问题,网络上有很多种介绍的解决办法,但是都是未能真正的解决问题。现在就根据本人的使用情况简单的讨论分析。 提示Component is not ready有以下几种情况...

洋碱
2018/06/13
50
0
Qt不会安装?C/C++学习之详细Qt安装教程,傻瓜式安装模式启动

Qt 安装 1.1 QT下载地址 http://download.qt.io/archive/qt/ 1.1.1 选择下载版本 1.1.2 下载结束,双击exe运行安装 1.2 认识Qt Creator 1.2.1 QtCreator 窗口 1.2.2 Qt项目 1.2.2.1 Qt 空项目...

这个人很懒什么都没留下
07/16
0
0
Qt设计模式(第二版):谁最需要本书?

情人节前夕,突然受邀作为本书中文版的审校,心中在惊喜之余,也有些诚惶诚恐。能与闫老师(yfx2003)合作,共同学习与探讨,确是一件幸事;但是自己真的能胜任该工作么?一开始心里还真是没底...

晨曦之光
2012/05/08
2.7K
0
Qt 5.13.0 Beta1 发布,RC 将于5月份推出

Qt 框架于昨天发布了 5.13.0 的首个测试版本 Beta 1。官方表示,在发布候选版前,会定期发布 Beta N 更新。预计于2019年5月7日发布首个 RC 版,详情请查看时间表。 接下来不妨看看 Qt 5.13 ...

局长
03/21
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部