QML和C++混合编程--Qt声明式用户界面运行环境
来源:互联网 发布:航天科技 知乎 编辑:程序博客网 时间:2024/05/22 13:52
1. QML文件通过QML运行环境进行加载和执行。
这包括声明式用户界面引擎和内建的QML元素与插件模块,它允许对第三方QML元素和模块的访问。
使用QML的应用程序需要调用QML运行环境来执行QML运行环境来执行QML文档,这可以通过创建QDeclarativeview或者QDeclarativeEngine来完成。
另外,声明式用户界面包含了Qt QML Viewer工具,它可以用来加载.qml文件。该工具可以用来开发和测试QML代码,而不需要编写C++应用程序来加载QML运行环境。
Qt Declarative UI Runtime,Qt QML Viewer。
2. 要部署使用了QML的应用程序,必须在应用程序中调用QML运行环境。
这可以通过编写一个Qt C++应用程序,然后通过QDeclarativeView实例来加载QML文件,
或者创建一个QDeclareEngine实例然后使用QDeclarativeView实例来加载QML文件。具体使用哪种方法依赖于已经存在的用户界面代码的特点。
Integrating QML with existing Qt UI code关键字
一、使用QDeclarativeView来部署
如果已经拥有一个基于QWidget的用户,可以使用QDeclarativeView将QML部件整合进来。QDeclarativeView是QWidget的子类,所以可以像其他QWidget部件一样将其添加到用户界面。使用QDeclarativeView::setSource()来加载一个QML文件到视图中,然后将该视图添加到用户界面中。
在.pro中添加代码
QT + = declaretive必须添加declaretive模块才可以在Qt程序中显示QML文件的内容。
#include <QDeclarativeView>QDeclarativeView view;view.setSource(QUrl("../myDeclarativeView/application.qml"))view.show();使用这种方式缺点:与QWidget相比,QDeclarativeView初始化很慢,而且会使用更多的内存。如果创建了大量的QDeclarativeView对象会导致性能下降。如果发生了这种情况,一个比较好的方法是在QML中重写这些部件,然后在主QML部件中加载这些部件,而不要使用QDeclarativeView。
注意,与QML相比,QWidget是为多种不同类型的用户界面设计的,所以将基于QWidget的应用程序和QML相连接并不总是一个好主意。如果用户界面是由少量复杂的静态元素组成,那么最好使用QWidget部件来实现;而如果用户界面由大量简单和动态的元素组成,那么最好使用QML来实现。
二、直接创建一个QDeclarativeEngine
如果在application.qml中没有包含任何的图形组件,或者由于其他原因需要避免使用QDeclarativeView,那么就可以直接创建QDeclarativeEngine。在这种情况下,application.qml会被作为一个QDeclarativeCompnent实例进行加载,而不是显示在一个视图中。
#include <QDeclarativeEngine>#include <QDeclarativeContext>#include <QDeclarativeComponent> QDeclarativeEngine engine; QDeclarativeContext * objectContext = new QDeclarativeContext(engine.rootContext()); QDeclarativeComponent component(&engine, "application.qml"); QObject * object = component.create(objectContext);如果已经拥有了一个基于图形视图框架的用户界面,那么可以使用这种方式直接将QML部件整合到QGraphicsSence中。例如将QML部件整合到QGraphicsScene中。
QGraphicsScene * scene = myExistingGraphicsScene(); QDeclarativeEngine * engine = new QDeclarativeEngine; QDeclarativeComponent component(engine, Qurl::fromLocalFile("application.qml")); QObject * object = qobject_cast<QGraphicsObject *>(component.create()); scene->addItem(boject);使用QGraphicsView选项可以优化QML用户界面的表现:
QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState);QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex);还有一种方法是将现有的QGraphicsWidget对象暴露给QML,并且在QML中创建场景。参考Basic Graphics Layouts Example示例程序。
- QML和C++混合编程--Qt声明式用户界面运行环境
- QML, Qt C++混合编程
- Qt中关于JavaScript/QML和C++混合编程
- C++和QML混合编程
- qml和widget混合编程
- Qt c++与QML混合编程
- QT之QML与C++混合编程
- Qt:QML与C++混合编程详解
- QML和C++混合编程--QML中的全局对象
- Qt Quick 之 QML 与 C++ 混合编程详解
- Qt Quick 之 QML 与 C++ 混合编程详解
- Qt Quick 之 QML 与 C++ 混合编程详解
- QML, Qt C++混合编程--QML与Qt C++ 交互机制探讨与总结
- C51和汇编混合编程----函数声明
- 如何用Qt和Java代码进行混合编程(在Qt for Anroid环境下)
- QML与C++混合编程
- QML与c++混合编程
- QML与C++混合编程
- MyBatis获取插入记录的 id 自增长字段值
- 网络多线程 ---实现网络加载图片
- Find命令示例(第二部分)----15个极好的Linux find命令示例
- 1139: 出栈序列统计
- can not open jvm.cfg
- QML和C++混合编程--Qt声明式用户界面运行环境
- (PO,VO,TO,BO,DAO,POJO)概念解释
- 南京java——软件测试培训网站
- 动态改变Store的请求URL
- 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
- UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法
- Android中的PendingIntent使用注意事项
- 设计模式笔记一(strategy pattern)
- 在Linux里设置环境变量的方法(export PATH)