QML (Qt Markup Language)是基于JavaScript、宣告式编程的编程语言,用于设计用户界面为主的应用程序。它是Qt Quick,诺基亚开发的用户界面创建包的一部分。
QML 主要用于移动应用程序,注重于触控输入、流畅的动画(60张/秒)和用户体验。QML documents 描述元素的对象树。
Qt 附带的QML 模块包括原始图形构建块(例如,矩形、图像)、建模组件;行为组件(例如,TapHandler、DragHandler、State、Transition、Animation)以及更复杂的组件控件(例如,按钮、滑块、抽屉、菜单)。
这些元素可以组合起来构建从简单的按钮和滑块到完整的支持 Internet 的程序的复杂组件。
QML 元素可以通过标准JavaScript内联和通过包含的 js 文件进行扩充。元素也可以通过使用 Qt 框架的C++组件无缝集成和扩展。
QML 是语言;它的 JavaScript 运行时是自定义的 V4 引擎,自 Qt 52 起;而Qt Quick是2D场景图和基于它的UI框架。这些都是 Qt Declarative 模块的一部分,而该技术不再称为 Qt Declarative。
QML 和 JavaScript 代码可以使用 Qt Quick Compiler 编译成原生 C++ 二进制文件。或者,还有一种 QML 缓存文件格式,它动态存储 QML 的编译版本,以便在下次运行时更快地启动。
开发工具
由于 QML 和 JavaScript 非常相似,几乎所有支持 JavaScript 的代码编辑器都可以使用。
但是,自 21 版以来的免费跨平台 IDEQt Creator和许多其他 IDE 中都提供了对语法突出显示、代码完成、集成帮助和所见即所得编辑器的全面支持。
qml 可执行文件可用于将 QML 文件作为脚本运行。如果 QML 文件以shebang开头,则它可以直接执行。为部署打包应用程序(尤其是在移动平台上)通常涉及编写一个简单的 C++ 启动器并将必要的 QML 文件打包为资源。
Qt5下,QWidget系列从QtGui中被剥离出去,成为单独的QtWidget模块。随着Qt Quick2的引入,QtDeclarative也逐渐和QWidget系列也脱离关系。
最终:在Qt5下的GUI编程,有两套不同的东西
QtWidget (使用一个被称为 BackingStore 的东西)
QtQuick (使用一个被称为 Scene Graph 的东西)
Qt4中的QDeclarativeView等一系列的东西被改成了QQuickView和QQmlItem等分别放到了QtQuick和QtQml模块。
QQuickView这一套框架完全脱离了QWidget的束缚,一路从QSurface到QWindow继承下来,虽说是窗口,但感觉却又不像是窗口。
QQuickView本能是使用OpenGL,使用硬件加速。
QQuickView 提供了一个窗体用于显示UI
QQmlEngine 提供QML运行的环境
QQuickWindow 显示窗体,以及对item对象的管理及用户交互
QQmlApplicationEngine 从Qt51开始提供的一个便捷对象 包含QQmlEngine和QQmlComponent能够根据一个qml文件创建一个application。
QQmlContext 类为对象的实例化以及表达式的评估提供了一个上下文环境。所有的对象都在一个特定的上下文中实例化,并且应用程序运行中要执行的表达式都在一个特定的上下文中执行。这个上下文定义了符号是如何被解析的,以及表达式 *** 作的值。
QQmlComponent 类可以用来加载QML文档。它需要QQmlEngine来实例化定义在QML文档中的对象层次
一个典型的QML应用程序有一个C++函数的入口点,该入口点是:实例化一个QQmlEngine并且使用QQmlComponent加载一个QML文档。引擎(QQmlEngine对象)提供了一个默认的QQmlContext,这是一个顶级的上下文,用于执行定义在QML文档中的方法和表达式。定义在QML文档中的对象层次将会通过调用QQmlComponent实例化对象的create()方法被实例化。
客户端可能需要通过注入属性或者对象到上下文中修改引擎提供的默认QQmlContext。它们可以通过调用QQmlEngine::rootContext()方法来访问顶级的上下文。
在实例化对象之后,客户端通常就将控制权传递给应用程序的事件循环,以使得用户输入时间(例如鼠标点击)可以被应用程序分发和处理。
以上就是关于如何评价QML全部的内容,包括:如何评价QML、qt5中的no engine怎么办、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)