首页 > 其他分享 >初学 qml - Learn Qml from Scratch

初学 qml - Learn Qml from Scratch

时间:2024-02-17 21:24:17浏览次数:22  
标签:qml 界面 Qt Scratch C++ QML Qml

前言


之前项目都是用 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

相关文章

  • scratch源码下载 | 炮轰僵尸
    程序说明:《炮轰僵尸》是一款基于Scratch平台制作的游戏程序,它采用了植物大战僵尸的经典场景。在游戏中,玩家需要控制一枚大炮来对抗不断入侵的僵尸。通过移动鼠标,玩家可以调整炮筒的方向,并在合适的时机按下鼠标左键发射炮弹,以消灭逼近的僵尸。这款游戏不仅提供了紧张刺激的游戏体......
  • scratch源码下载 | 几何冲刺
    程序说明:《几何冲刺》是一款基于Scratch平台开发的跑酷类游戏程序。在这个游戏中,玩家控制一个黄色的小方块,在快速向前冲刺的过程中躲避各种障碍物。通过按下键盘上的上方向键,玩家可以操作小方块进行跳跃,以避开途中的障碍。游戏的目标是尽可能让黄色小方块跑得更远,挑战玩家的反应......
  • scratch源码下载 | 蜘蛛传说
    程序说明:《蜘蛛传说》是一个通过Scratch平台制作的互动游戏项目。在这个故事中,玩家将扮演一只蜘蛛,其原本和平的生活被一只入侵的壁虎所打破。为了保卫自己的家园,蜘蛛必须运用智慧和勇气与壁虎对抗。游戏通过ADSW键进行移动,F键发射蜘蛛弹来攻击壁虎,但发射蜘蛛弹会消耗体力。玩家需......
  • scratch源码下载 | 飞天厨师
    程序说明:《飞天厨师》是一款使用Scratch平台制作的游戏程序。在这个游戏中,玩家将控制一名厨师角色,他在天空中不断掉落。玩家需要利用方向键左右移动厨师,以便他能够准确地踩在空中的食物上。每当厨师成功踩到食物时,他就会飞得更高。如果厨师在掉落的过程中没有踩到任何食物,游戏就......
  • Scratch源码下载 | 3D钻石
    程序说明:《3D钻石》是一个利用Scratch平台创作的独特艺术作品。此程序在屏幕上呈现一个精致的3D钻石模型,允许用户通过鼠标操作来旋转和查看钻石的不同角度。该程序还提供了修改钻石参数的功能,使用户能够自定义钻石的外观和特性。由于其复杂的3D渲染和交互设计,这个作品的制作难度......
  • scratch编程作品-龙年发大财
    作品介绍:龙年欢歌而来,带着满满的希望与勃勃生机。愿小虎鲸Scratch资源站激发您编程之路的无限灵感,让每一天都充满探索与创造的喜悦。在这吉祥如意的年份里,愿您的每一份耕耘都换来丰收的喜悦,每一个梦想都渐渐成为现实。愿您的心灵如同翱翔天际的龙,自由自在,无惧挑战。愿您的生活绚......
  • 新年恭喜发财-scratch编程作品
    程序说明:《新年-恭喜发财》是一个基于Scratch平台制作的动画贺卡项目。该项目通过编程和艺术设计,展现了浓厚的中国新年(2024年为龙年)氛围,以及传统的恭喜发财祝福。动画中包含有喜庆的一家人、鞭炮、福字、灯笼等春节元素,以及寓意吉祥和财富的动画效果。此项目不仅可用于学习编程,还......
  • 滑块解锁-scratch编程作品
    程序说明:《滑块解锁》是一款基于Scratch平台制作的益智类小游戏。游戏中存在多个黄色滑块阻挡红色滑块通往出口的路径。玩家需要通过逻辑思考和精确操作,滑动黄色滑块以开辟道路,使红色滑块顺利从出口脱出。随着游戏关卡的递进,难度逐渐增加,为玩家带来更大的挑战。滑块解锁源码免......
  • Umov移动方块-scratch编程作品
    程序说明:《Umov移动方块》是一款基于Scratch平台制作的小游戏。在这个游戏中,玩家将面对一个3×3的圆圈棋盘,并通过鼠标控制蓝色方块在这些圆圈中灵活移动。游戏的挑战在于,舞台的四周边缘会不断生成白色小球,它们会向对向移动。玩家的目标是尽量让蓝色方块避免与这些移动的小球发生......
  • 新年切红包-scratch小游戏
    程序说明:《新年切红包》是一款Scratch制作的小游戏,灵感来源于流行的切水果游戏。在这个游戏中,玩家需要用鼠标切割屏幕上不断飞出的红包,切割到红包将获得金币奖励,而切割到爆竹则会导致金币扣除。游戏以新年、春节为主题,红包和爆竹的元素增添了浓厚的节日氛围。新年切红包源码免......