Qt Quick教程第一篇:前言

大家好,我是吉米,这是一系列Qt Quick相关技术教程的首篇。这个教程构思已久,却从未动手,被自己的拖延症再一次折服。不过好在工作中这方面的开发一直没断过,所以相关的经验也更多了。从现在开始,让我们一起开始学习吧。

教程面向对象

之前看到过一部讲Qt Quick的书,叫《Qt Quick核心编程》,砖头一本,但翻了下实在忍不住吐槽:这哪里叫核心啊?这分明只是Quick Start之类的简易教程。可见现在技术界浮躁之甚,自己没怎么弄明白呢就开始出书了。我这个系列的教程本着知无不言童叟无欺的态度,结合我这两年来生产环境中实践所得,力求讲解清楚,深入浅出。但是也需要作为读者的你有以下基础:

  1. 有Qt编程基础,Widgets方面的就行;
  2. 有JavaScript基础,不需要精通,能看懂就行(完全不会的话先网上看看JS教程吧);
  3. 有CMake基础,我们的例子都将以CMake构建(而不是Qt自带的qmake,原因后面讲),所以没用过CMake的同学请先了解下CMake的基本用法。

学习、使用Qt Quick的起因

我从2016年初开始接触Qt Quick。虽然从07年大二开始就用Qt,但一直停留在Widgets,对QML这一块好奇但没敢碰。究其原因一是觉得Widgets足够好了,应付日常科研开发足以;二是对JS这种脚本语言不是很感冒,因为在我的领域——信息安全、三维渲染——性能是最重要的。这样一直过了2015年,我甚至没用过Qt5。

事情在2016年发生了变化。工作之后,公司交给我一个任务,设计开发一个软件框架,以改进现有的软件质量。说实话,当初是没底的。一是没做过什么软件框架,二是我自己掌握的开发技术也不先进啊。当时公司已经开始往Qt转了,而我被认为是Qt方面的专家(捂脸)。然后有个同事问我会不会Qt Quick,我说不会,有点尴尬。既然给了任务,就要认真对待。我观察到:

  1. 多种迹象表明,Qml/Quick将是未来Qt着重发力的一块,而Widgets被认为Done,即已完成,未来不会再有新功能加入,只会对重要bug做修复;
  2. 公司的状态也已经从生存到了想要提高用户体验的阶段了;
  3. 不少国际大厂的软件设计已经摆脱了传统工业专业化软件的那种刻板、简陋、复杂的风格,转而向易用、扁平、响应式、美观方向迈进。

所以采用Quick构建新一代软件架构似乎是顺理成章的事。当然还有一点:我是Qt专家,我怎么可以不会Qt最新技术呢?

但当时别说国内了,国外也没多少Qt Quick这方面的技术文章,StackoverFlow上没记错的话只有区区一百多个问题。没办法,只能边看Qt文档边实践。于是风风火火、坑坑洼洼的Qt学习之旅开始了,时至今日已逾两年。

技术优势

界面开发库数量众多,那从技术上讲,Qt Quick和Qt Widgets相比,或者和其他界面库例如wxWidgets、GTK+、duilib等相比如何呢?

首先,我们将这些界面库分分类,可以分为两类:

  1. 传统界面库。包括Qt Widgets、wxWidgets、GTK+这些,通过对底层操作系统图形界面的封装来绘制窗体,实现跨平台;
  2. 像素界面库,用英文讲叫Pixel UI。包括duilib、CEGUI以及我们的主角Qt Quick。这类界面库直接调用底层显卡接口,操作显存中的每个像素。它实际上是直接在这些像素中构建出窗口组件、事件消息等上层逻辑概念。

这两类界面库的对比如下:

传统界面库 像素界面库
性能 ,依赖于CPU ,依赖于CPU、GPU
原生样式 ,因为调用系统界面库,所以拥有原生的界面样式,和操作系统风格一致 ,由于直接操作显卡,不调用系统界面接口,需要自行模拟系统样式
可扩展性 ,由于系统界面库的封装,想要改某些细微样式非常困难 ,由于能操作每个像素,想怎么改就怎么改
移动平台支持 ,由于这些界面库出道的时候,移动平台还没兴起,所以在这些平台上有些水土不服,尤其是触屏支持不好 ,设计之初就考虑了移动平台,OpenGL ES也支持完善
动画、响应式支持 ,受限于系统界面库的能力,要实现丰富、流畅的动画比较困难 ,由于底层就是对像素进行操作,各种动画就是对这些像素的一种宏观逻辑上的变化,并不改变底层渲染的机制,所以支持完善、流畅
稳定性 ,由于开发那么多年了,该发现的bug应该差不多都发现了 ,限于发展时间短,应用范围不广,开发推进快,所以没有传统界面库那么稳定。

从上面的表格我们可以总结这两类技术各自的适应范围:

  • 传统界面库适合于专业性的、工业型的程序,不要求花哨的界面,只要点下按钮、选择菜单就能工作,最重要的是稳定、能如期提供需要的功能;
  • 像素界面库则适合于用户体验要求高、讲究使用流程的应用,例如面向普通用户的手机app、桌面软件等,最重要的是使用流畅、美观大方,在不那么buggy的情况下偶尔出点小问题也是可以容忍的。

从这个分析角度讲,Qt Widgets适合于第一种情况,而Qt Quick更适合于第二种情况。而第二种情况正是当时公司所想要转型的方向。但这种区别也不是固定的,目前Qt Quick出来也有些年数了,它的稳定性已经大好于从前;而工业界的软件开发水平逐渐提高,已经从之前的只要work就行的需求提升到也讲究用户体验的境界了(这个前面提过了)。同样两个功能完备的软件,一个设计优良,一个毛毛糙糙,你说工程师更愿意用哪个?所以最终都是要讲究用户体验的。

Qt Quick的这些技术优势正是我最终选择它的原因。

开发环境

文章末尾还要交代下这个教程用的开发环境以及选择原因:

名称 版本号 原因
Windows操作系统 Windows 10 64位 新系统,比以前的好用(个人感觉)
Qt 5.9 for VS2015 64位 5.9是LTS版本(即Long Term Support,长期支持),更适合于生产环境
Visual Studio 2015 Community,update 3 社区版是免费的,而VS2015比之前的版本对C++11的支持好太多了
CMake 3.9.6 很多类库都提供CMake支持,而且公司内已经在推广了

上面只是我自己在用的环境,不是必须一致的。但最好一样,减少很多环境差异导致的不一致情况。

这篇文章就到这里了。下篇文章我们将马上动手做一个简单Quick程序,然后剖析这个程序的结构。敬请期待。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,510评论 25 707
  • 1.初识 Qt5 本书将为大家介绍使用 Qt 5.x 版本开发应用程序的不同方面。我们将专注于新的 Qt Quic...
    赵者也阅读 2,537评论 0 8
  • Qt是属于一个跨平台的GUI开发软件,支持的平台有Unix、Linux、Windows/WinCE、IOS等。 Q...
    一叶之界阅读 8,144评论 0 17
  • 前言 关于Qt的学习道路需要不断日积月累,下面有一些学习资料提供给大家:Qt官网、编码风格、GitHub & Th...
    YBshone阅读 5,710评论 3 95
  • 见缝插针,又在购物车放了点东西。 准备双十一也有阵子了,临到跟前觉得还有很多需要的没有整理出来。烧脑的各种优惠方式...
    Clearness阅读 295评论 0 0