前言
之前项目都是用 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开发板
标签:qml,界面,Qt,Scratch,C++,QML,Qml From: https://www.cnblogs.com/lygarden/p/18018183