微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么将QML用于iOS或Android应用程序开发?

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
      }
    }
  }
}

运行后的效果如下: 

helloworld-qml-app

视图代码的原生性能和编译

每个QML项的后台都使用高性能的本机C ++实现。当Qt运行时解析QML代码时,将所有QML项目创建为C ++对象。使用QML标记和JavaScript逻辑,来可以控制和组合它们,使构建UI变得容易。

无需使用 C++ widgets.创建UI,使用QML创建的应用程序具有相同的性能。Qt会在第一次解析代码时立即编译您的QML树,使您可以立即获得QML应用程序的即时(Just-in-Time (JIT)编译。  

qt-qml-compilation-jit-aot

   使用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项代表每个列表元素。    

listview-model-delegate-qml-app

上述的ListModel类型实际上是一个C ++ QAbstractListModel暴露于QML的实现。上面的代码不仅创建了C ++对象的UI树。它还处理C ++数据结构中的列表数据。    

以这种方式开发用户界面非常快。并且由于C ++实际上是在后台使用的,因此没有性能上的缺点。尽管如此,对于长时间运行的,重量级的和数据密集型的计算,还是有必要脱离QML。在这种情况下,C ++将胜过JavaScript。

 

     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐