QT是一个功能强大且功能丰富的C ++框架,可用于许多不同的行业。它支持开发用于台式机,移动平台和嵌入式系统的应用程序-所有这些操作都来自一个代码库。
关于Qt最好的事情之一是QML,它是一种扩展JavaScript的响应式编程语言(有时也称为声明式语言)。与iOS或Android的原生开发相比,它可以创建惊人的应用程序,最多可节省90%的代码。借助更少的代码和适用于iOS,Android和桌面多种平台的单一代码库,使维护成本将大大降低。您可以更快地将更新发布到不同的平台,使团队拥有统一的知识体系。
自定义渲染和QML项目树
与许多其他跨平台解决方案相比,Qt提供了一种不依赖原生平台渲染或Web视图的体系结构。它将所有控件和渲染移至应用程序本身。要在设备屏幕上显示项目,只需要一个带有画布的原始视图即可绘制。
该体系结构与过去很常见的所谓“Cookiecutter”应用程序不同。Qt代替原生平台渲染器,而是使用应用程序驱动的自定义渲染。这样可以在所有受支持的平台上提供统一的渲染器和应用程序体验。
但是不要让Qt依赖C ++这一事实所误导。由于引入了用于快速UI开发的QML和JavaScript,您可以以可自定义和可扩展的方式创建项目树,也可以合并并嵌套各个QML项目以形成描述您的UI的树,而无需深入研究复杂的C ++代码!
以下是简单的“ Hello World!”QML应用程序的代码。
import Felgo 3.0
import QtQuick 2.0
App {
NavigationStack {
Page {
title: "My First App"
AppText {
text: "Hello World!"
anchors.centerIn: parent
}
}
}
}
运行后的效果如下:
视图代码的原生性能和编译
每个QML项的后台都使用高性能的本机C ++实现。当Qt运行时解析QML代码时,将所有QML项目创建为C ++对象。使用QML标记和JavaScript逻辑,来可以控制和组合它们,使构建UI变得容易。
无需使用 C++ widgets.创建UI,使用QML创建的应用程序具有相同的性能。Qt会在第一次解析代码时立即编译您的QML树,使您可以立即获得QML应用程序的即时(Just-in-Time (JIT))编译。
使用Qt Quick编译器,您还可以提前编译QML代码(Ahead-of-Time (AOT))。它将QML和JavaScript直接转换为字节码。这种体系结构使基于QML的应用程序变得超级快速和高性能。
Qt MVC:QML中的模型和视图
对于大多数应用程序来说,根据一些应用程序数据填充UI视图是一项基本任务。Qt提供了对模型,视图和委托组件的内置分离。以下示例将列表中的一组数据记录可视化:
import Felgo 3.0
import QtQuick 2.0
App {
// data model
ListModel {
id: fruitModel
ListElement {
name: "Banana"
cost: 1.95
}
ListElement {
name: "Apple"
cost: 2.45
}
ListElement {
name: "Orange"
cost: 3.25
}
}
// list page
NavigationStack {
Page {
title: "List Page"
AppListView {
anchors.fill: parent
model: fruitModel
delegate: SimpleRow {
text: name
detailText: "cost: "+cost
}
} // AppListView
} // Page
} // NavigationStack
} // App
该AppListView展示有滚动列表的视图。对于每个ListModel中的ListElement,视图实例化委托项目来使每个元素显示在列表中。在这种情况下,SimpleRow项代表每个列表元素。
上述的ListModel类型实际上是一个C ++ QAbstractListModel暴露于QML的实现。上面的代码不仅创建了C ++对象的UI树。它还处理C ++数据结构中的列表数据。
以这种方式开发用户界面非常快。并且由于C ++实际上是在后台使用的,因此没有性能上的缺点。尽管如此,对于长时间运行的,重量级的和数据密集型的计算,还是有必要脱离QML。在这种情况下,C ++将胜过JavaScript。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。