为什么选择QT?
毕业设计要做一款基于GUI界面交互的自动售卖系统,在众多的GUI开发平台当中,我选择了QT。
QT相比与其他GUI开发平台来说,最大的优势是跨平台。按我的理解,就是写好的一份代码可以不用过多的修改就能移植到Linux系统、Windows系统,甚至是IOS系统。
或许因为我是一个Linux软件开发工程师,所以我会偏爱c/c++。其实也是一方面考虑到以后职业发展要用到C++。再加上通过这段时间对QT的体验,感觉GUI设计软件都有共通之处,所以也不必要去纠结哪个GUI开发平台,哪种语言好的问题?
用Qt Widgets 还是Qt Quick?
在学习一门新的技术之前需要了解全局。我看了看QT的介绍,了解到QT开发是分为两大派系,一个是Qt Widgets ,另一个是Qt Quick。
Qt Widgets是什么?
按照官网的定义:
The Qt Widgets Module provides a set of UI elements to create classic desktop-style user interfaces.
Qt Quick是什么?
按照官网的定义:
Qt Quick is a collection of technologies that are designed to help developers create the kind of intuitive, modern, and fluid user interfaces that are increasingly used on mobile phones, media players, set-top boxes, and other portable devices. Qt Quick consists of a rich set of user interface elements, a declarative language for describing user interfaces, and a language runtime. A collection of C++ APIs is used to integrate these high level features with classic Qt applications.
按照我的理解,Qt Widgets是适合传统桌面开发的UI库;Qt Quick是一种用qml语言开发的库,集成了很多绚丽的UI开发元素,能自动转化为c++语言运行,非常适合APP,嵌入式设备等要求界面冲击感强的应用场景。
按前辈的指引得知,
“对于传统的桌面程序来说,优先考虑使用 Qt Widgets,若要开发更“现代”的 UI 与高级应用,建议使用 Qt5.x + QML 2.x + QtQuick 2.x。”
“qml比较炫吧。比较适合移动端开发。widget对于pc端比较合适。兼容性更好。”qml比较炫吧。比较适合移动端开发。widget对于pc端比较合适。兼容性更好。“
Qt Quick利用一种类似java script 的qml语言进行开发,代码看上去就是json字符串的应用,对于c++水平不高的我来说是一个福利。
安装qt
1.到官网下载安装包:
https://download.qt.io/official_releases/qt/5.10/5.10.0/
2.一路安装就好,该安装的安装包全部安装上
面对Qt Quick如何入门?
学习一门新技术在了解全局后还需要确定范围。搞清楚Qt Quick的范围和边界,对于学习才有动力。我找到一本很好的书学习Qt Quick, 安晓辉的《Qt Quick核心编程》可以助我一臂之力。
按照我的归纳,以及项目应用需要,总结得出Qt Quick比较重要的有四大模块。
一是GUI界面基本组成元素和布局;
二是事件处理;
三是多媒体与网络;
四是qml语言的语法;
在确定范围后,就要定义目标,确定难易:
详细参考附录: Qt Quick比较重要的有四大模块难易点拆解
在定义好目标后,为了加快学习进度以及更有针对性,我在github上寻找项目资源帮助我更好了解Qt Quick开发的应用。如:
EiriniMits/ShopMyCloset:
https://github.com/EiriniMits/ShopMyCloset/blob/master/LICENSE
我通过参考上面的代码并且在该工程的基础上修改,即可快速有针对性的学习。
这是我Qt Quick学习的一些感悟,先总结到这。明天的事我们明天再聊,后面继续总结Qt Quick的学习经验。
~附录:Qt Quick比较重要的有四大模块难易点拆解:
GUI界面基本组成元素和布局:
图形界面基本组成元素
基础:
TextInput
难点:
组件
可以自定义组件(类似可以自定义一个结构体)
图形界面元素布局
难点:
定位器
布局管理器
与布局相关的类库:
Item Layout
RowLayout 、
ColumnLayout 、
GridLayout
Item Positioner
anchors ,锚布局
Row ,行布局
Column ,列布局
Grid ,表格布局
Flow ,流式布局
常用元素:
行编辑
文本块
ProcessBar
画布:
基础:
基本组成
基本绘图模式
Model/View:
ListView
TableView
GridView
PathView
动画
基础:
动画分类
基本动画元素
难点:
三种模式
组合动画
qml语法:
整体难点:
对象
ECMAScript:
难点:
对象
宿主对象
C++与QML混合编程:
难点:
在QML中使用c++类和对象
在c++中使用QML对象
事件处理:
难点:
信号与槽:
定义信号
捕捉信号
信号处理器:
触发源的使用:
鼠标
键盘
定时器
触摸
多媒体:
基础:
播放音乐
视频
拍照
网络:
基础:
网络的对象
难点:
QML的Http
使用c++完成复杂的网络操作
参考:
Qt Widgets、QML、Qt Quick的区别
https://blog.csdn.net/liang19890820/article/details/54141552
Ubuntu16.04下安装QT5.8
https://blog.csdn.net/hhrock/article/details/61621044