在 C++ 中使用QML对象
来源:互联网 发布:沈阳化工大学淘宝地址 编辑:程序博客网 时间:2024/06/05 17:56
看过了如何在 QML 中使用 C++ 类型或对象,现在来看如何在 C++ 中使用 QML 对象。
我们可以使用 QML 对象的信号、槽,访问它们的属性,都没有问题,因为很多 QML 对象对应的类型,原本就是 C++ 类型,比如 Image 对应 QQuickImage , Text 对应 QQuickText……但是,这些与 QML 类型对应的 C++ 类型都是私有的,你写的 C++ 代码也不能直接访问。肿么办?
Qt 最核心的一个基础特性,就是元对象系统,通过元对象系统,你可以查询 QObject 的某个派生类的类名、有哪些信号、槽、属性、可调用方法等等信息,然后也可以使用 QMetaObject::invokeMethod() 调用 QObject 的某个注册到元对象系统中的方法。而对于使用 Q_PROPERTY 定义的属性,可以使用 QObject 的 property() 方法访问属性,如果该属性定义了 WRITE 方法,还可以使用 setProperty() 修改属性。所以只要我们找到 QML 环境中的某个对象,就可以通过元对象系统来访问它的属性、信号、槽等。
使用元对象调用一个对象的方法
QMetaObject 的 invokeMethod() 方法用来调用一个对象的信号、槽、可调用方法。它是个静态方法,。假设一个对象有这么一个槽 compute(QString, int, double) ,返回一个 QString 对象,那么你可以这么调用(同步方式):
QString retVal;
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "sqrt"),
Q_ARG(int, 42),
Q_ARG(double, 9.7));
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "sqrt"),
Q_ARG(int, 42),
Q_ARG(double, 9.7));
QML与现有Qt UI代码的整合
如果你已经有了一个基于QWidget的UI,QML widgets可以使用QDeclarativeView来进行集成。QDeclarativeView是QWidget的一个子类,所以你可以像加载其他QWidget一样把它加载进你的UI。 具体方法是使用QDeclarativeView::setSource()方法加载一个QML文件到视图中,然后将这个视图(即QDeclarativeView)加到你的UI中。
请注意,QWidgets的UI设计理念与QML并不相同,所以将基于QWidget的应用移植到QML并不总是一个好主意。
如果你的UI是由少数几个复杂、静态的元素的组成,使用QWidgets是一个更好的选择;
而如果你的UI是由大量简单、动态的元素组成,那么QML则是你的最佳选择。
Introduction to Qt Quick for C++ Developers
在Qt5,所有QML应用呈现一个OpenGL场景图的架构,而不是在Qt4使用的图形视图框架。由于这种建筑的变化规模,在Ç++ API已经被广泛的重组和的QtDeclarative模块已被弃用换为成两个新模块:Qt QML,它实现的QML引擎和语言的基础设施,和Qt Quick,它实现了视觉帆布和场景图的后端。
以前在QtDeclarative模块的所有类都已经放入了Qt QML和Qt Quick的模块,他们的类的名称已被更改,以反映其新的模块位置。类名的变化如下:
在Qt5,所有QML应用呈现一个OpenGL场景图的架构,而不是在Qt4使用的图形视图框架。由于这种建筑的变化规模,在Ç++ API已经被广泛的重组和的QtDeclarative模块已被弃用换为成两个新模块:Qt QML,它实现的QML引擎和语言的基础设施,和Qt Quick,它实现了视觉帆布和场景图的后端。
以前在QtDeclarative模块的所有类都已经放入了Qt QML和Qt Quick的模块,他们的类的名称已被更改,以反映其新的模块位置。类名的变化如下:
0 0
- 在 C++ 中使用QML对象
- qml中注册和使用C++对象,以及在qml中实现窗体最大最小化
- 在QML中使用定时器
- 在QML中使用alarm
- 在QML中管理动态对象
- 在C++中与QML对象交互
- QML基础——在C++程序中使用QML
- QML基础——在C++程序中使用QML
- QML基础——在C++程序中使用QML
- QML基础——在C++程序中使用QML
- QML基础——在C++程序中使用QML
- QML基础——在C++程序中使用QML
- QML基础——在C++程序中使用QML
- 在C++程序中使用QML
- 在QML中使用自定义属性类型
- 在C++程序中使用QML
- 正确地在QML应用中使用fontsize
- 如何在QML中使用multitouch
- oracle中date错误,ORA-01830: date format picture ends before converting entire input string
- 使用HaProxy实现Thrift服务端的负载均衡
- iOS应用程序内购/内付费(一)
- LTSpline
- Java反射机制
- 在 C++ 中使用QML对象
- Hdu 5664 Lady CA and the graph(有n个点的树,给定根,叫你找第k大的特殊链)
- 网速魔法师 v1.8 官方安装版
- git 使用教程,常用命令
- 说说这阵子遇到的烦人bug
- zabbix3.0.4 邮件告警详细配置
- JS动画
- Swift中@IBDesignable/@IBInspectable的使用
- Maven学习总结(24)——Maven版本管理详解