初学 qml - Learn Qml from Scratch

前言


之前项目都是用 Qt/C++/Widget 方式来开发,项目组中对这种模式运用的比较成熟(这里成熟应带引号),因为会用C++基本就行,而且调试也比较方便(qtcreator+gdb)。但使用过程中也发现一些问题。比如C++一般写逻辑在行,写界面用起来很麻烦,代码量大(虽然这一点可以借助designer来简化界面布局--效果也是不错的),周期长。再者,界面与逻辑无法做到分离,写界面还必须学习C++(前后端分离现在也是C/S架构中Desktop App开发的共识)。再者,由于C++在内存、类型方面等存在的“陷阱”,导致程序Bug多,界面开发者需要从这些编码、编译细节中摆脱出来,重点关注界面开发。再者,目前很多嵌入式项目也在用Qt做界面,用qml的效果比C++效果好很多。之前一直听过Qml,运行了Qt的示例后发现果然另有洞天,而且同事用Qml写过一个小项目效果也不错,并且开发速度快。几番搜索,大概明白Qml是个什么东西,谨记于此以备忘(由于没有实际项目,这里仅粗略描述Qml的特性)。

什么是Qml:

Qml是个声明性脚本语言+JavaScript,并可以用Qt/C++来进行扩充。由于是脚本,需要解释器,也就是QmlEngine。QmlEngine往往在main.cpp中,项目中的cpp、qml等仍由pro文件管理。

什么是QtQuick:

Qt官方的组件库,较基本的Qml提供了更加丰富的组件。另外,国外还有个Felgo,更是将Qml组件做到了极致。

使用Qml的优点:

首先,使用Qml可以做到界面与逻辑分离,并可以动态加载,开发起来比C++要快不少。再者,效果往往比C++的好看,由其是嵌入式应用。再者,类型安全,语法结构较为简单,对软件工程有益(官方文档中也有提到qml会造成一些语法混淆(#Debugging overwriting of bindings),但应该比C++强一些)。再者,看Qt的意思,应该是要大力推广Qml。

使用Qml的缺点:

至于缺点,本人评估了一下,首先,习惯C++的同事转向qml可能比较难(说难主要是观念上的,并不是技术上),两个世界差距还是有点大。其次,qml是动态解析,编译期间无法提前知道错误,需要留意运行时的输出窗口。再次,本质上QmlEngine还是又封装了一层,如果出了底层的错误或Bug,可能比较难调试(不过实践证明Qt的bug还是极少的),踩完C++后可能又要入坑Qml一段时间。

 话不多说,进入正文。

Qml学习要点


 

运行Qt示例--看网上教程(多看)--看官方文档(理解原理)

网上主要的参考为:

1) qml系列一到十,包含model-view, 布局,事件处理,qml与C++的结合,很实用:https://blog.csdn.net/bureau123/article/details/123741441

2)qml要点速记: https://blog.csdn.net/wangyi463295828/article/details/117472568

3)qml可视化面版项目一到三(其中包含有echart),实际项目,博主还有b站教学视频: https://blog.csdn.net/Jinyizhi2233/article/details/131176177

4)  qml项目管理:https://blog.csdn.net/qq_45303986/article/details/129023313

Qt官方主要参考:

1)What is Qml ? :qml简介,另见 Qt QML

1)QML Syntax Basics:qml基本语法

2)QML Basic Types: 基本类型,区别与对象类型(The QML Type System

3)QML Object Attributes: 主要讲述属性,内容较多。qml属性是核心之一,包含普通属性写法、特殊属性写法、信号处理器属性、关联属性等,另外还有属性绑定(Property Binding)。

4)Signal and Handler Event System: 信号处理。

Qml主要学习要点:

1) qml Type 类比 c++的Class

2) qml语法灵活,与C++有些许区别。但适应后能感觉Qml的强大。

3)了解可见元素(Item)与不可见元素(QtObject,Component),对象层级树

4)了解Component, 对象的作用域(Context), 创建Component的三种方式(Qt.createQmlObject, Qt.createComponent(),  component.createObject(),及动态创建对象。

5)QML Object Attributes 中的 关联属性(Attached Properties)类似与C++中的静态函数。

Qml嵌入式应用:

1)野火嵌入式Qt应用开发实战指南——基于LubanCat-i.MX6ULL-MP157开发板

 

posted @ 2024-02-17 21:08  liyanguu  阅读(194)  评论(0)    收藏  举报