1. LubanCat与Qt

本章作为教程的第一部分的开篇,主要内容来介绍一下Qt和我们的LubanCat。

1.1. 什么是Qt

1.1.1. Qt框架

One framework. One codebase. Any platform,这是Qt官网的一句话,很好的概括了什么是Qt。

install_qt_creator000

Qt是一个开源的C++应用程序框架,它拥有完备的C++图形库和集成了一系列代码模块简化难度, Qt支持C++,Python,QML,Javascript等多种语言,适合多种技术、开发方式。

同时Qt也拥有一套完整的设计、开发工具以及丰富的文档和例程,其开源社区非常活跃, 这些能明显降低开发难度和缩短开发时间。

1.1.2. Qt发展

  • Qt最早是1991年由挪威的Eirik Chambe-Eng和Haavard Nord开发的,1994年3月4日成立奇趣科技公司(Trolltech);

  • 2000年奇趣科技公司为开源社区发布了遵循 GPL(GNU General Public License)许可证的开源版本;

  • 2008年诺基亚公司收购了奇趣科技公司,并增加了 LGPL(GNU Lesser General Public License)的授权模式;

  • 2011年3月Qt 商业授权业务出售给了芬兰IT服务公司Digia。

2013年7月3日发布Qt5,2020年6月12日Qt5.15 LTS 正式发布,目前已经推出Qt6。

经过多年的发展,市面上也有很多基于Qt开发的应用程序:WPS、YY语音、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、VirtualBox、Google地图、Photoshop等等

1.1.3. 为什么选择Qt

Qt有非常好的跨平台特性,使用Qt开发的软件只需要做很少的适配甚至根本不需要修改任何源代码, 就可以在大多数的平台上编译运行。并且它会自动根据平台的不同,表现平台特有的图形界面风格。

Qt的图像图形支持非常优秀,尤其是在Linux平台,6.0更是引入对3D的支持。 使用Qt库做UI设计开发非常简单,Qt提供的辅助开发工具能明显缩短开发周期且让我们代码更加规范,便于维护。

Qt是一套开源框架,同时又能以LGPL授权,对于社区开发以及商业开发都非常友好。

Qt大力支持嵌入式,MCU等领域的发展,其插件机制非常灵活。

1.2. Qt工具和下载

Qt发展至今已经快三十年了,从Qt4到Qt5到Qt6已经经历了很多个版本的迭代。 同时也开发了qtdesignstudio,qtcreator,qt3dstudio等开发工具。

1.2.1. Qt开发工具

首先我们要明白Qt是一个应用程序框架,是一套库,是一系列开发工具的组合。 这些库,开发工具都是由Qt公司的程序员编写的,然后借助现有的编译工具编译出来的。

这套现有的编译工具叫 GNU 工具链

GNU工具链(GNU toolchain)是一个包含了由GNU项目所产生的各种编程工具的集合。 这些工具形成了一条工具链(串行使用的一组工具),用于开发应用程序和操作系统。 GNU工具链在针对嵌入式系统的Linux内核、BSD及其它软件的开发中起着至关重要的作用。 GNU工具链中的部分工具也被Solaris, Mac OS X, Microsoft Windows (via Cygwin and MinGW/MSYS) 和 Sony PlayStation 3等等其它平台直接使用或进行了移植。

GNU工具链中包含的项目有:

  • GNU make:用于编译和构建的自动工具;

  • GNU编译器集合(GCC、G++):一组多种编程语言的编译器;

  • GNU Binutils:包含链接器、汇编器和其它工具的工具集;

  • GNU Debugger(GDB):代码调试工具;

  • GNU构建系统(autotools):Autoconf、Autoheader、Automake、Libtool

GNU 工具链是一套通用的工具链,而下面所说的 Qt 工具集 则是Qt特有的开发工具。

Qt 库

库文件一般指计算机上的一类文件,我们可以简单的把库文件看成一种代码共享,它提供给使用者一些可以直接拿来用的变量、函数或类。

库有两种静态库和动态库两种。其区别是:静态库在程序的链接阶段被复制到了程序中; 动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。 使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本, 因此节省了很多内存,而且使用动态库也便于模块化更新程序。

Qt库,这里指Qt5的动态库(Windows下为dll文件,Linux下为so文件),在我们写代码的时候,只需要包含相关的头文件,就可以调用Qt的接口。

Qt 工具集

  • qmake 用于自动生成Makefile。

  • uic 用于读取XML格式的用户接口定义(.ui通过与生成)文件Qt设计并创建一个相应的C ++头文件。

  • moc 元对象编译器是处理Qt的C++扩展的程序。

  • rcc 资源编译器用于在构建过程中将资源嵌入到Qt应用程序中。

  • Qt Creator 是Qt官方推出的一款轻量级跨平台的集成开发环境(IDE)。

  • Qt Assistant 用于查看Qt帮助文件格式的在线文档的工具

  • Qt Designer Qt Designer是用于使用Qt小部件设计和构建图形用户界面(GUI)的Qt工具。

  • Qt Linguist Qt为将Qt C++和Qt Quick应用程序翻译成本地语言提供了出色的支持。

  • Qt Design Studio Qt Design Studio是一个UI设计和开发环境,用于创建动画UI并在台式机或Android和嵌入式Linux设备上进行预览。

Qt Creator 是我们最常用的工具,包括项目生成向导、高级的C++代码编辑器、浏览文件及类的工具、 集成了QtDesigner、图形化的GDB调试前端,集成qmake构建工具等。使用Qt Creator就能完成代码编写,程序编译、调试。

Qt Creator将用于构建和运行项目的设置分组为工具包,用于管理GNU工具链和Qt库版本,以简化跨平台和跨配置开发。 这个工具包叫 Qt构建套件(Kits)

例如在我已配置好的环境中,包含如下两个构建套件。Desktop Qt 5.11.3 GCC 64bitebf_lubancat , 后面会对 ebf_lubancat 这个套件的配置进行进一步说明。

这两个构建套件配置如下:

构建套件

GNU工具链

Qt库版本

Desktop Qt 5.11.3 GCC 64bit

GCC G++ x86

Qt 5.11.3 GCC 64bit

ebf_lubancat

arm-linux-gnueabihf

Qt 5.11.3 (qt-everywhere-src-5.11.3)

qt_introduc003

这里我们先简单区分一下GNU工具链,Qt库,Qt工具集,后面搭建环境会使用到。

1.2.2. Qt下载

在这个网站上我们可以找到上面提到的Qt开发工具,Qt源码,Qt库,https://download.qt.io/ , 大致介绍一下下载目录,方便读者查阅。

qt_introduc004
  • snapshots 预览版,最新的开发测试中的 Qt 库和开发工具

  • online Qt 在线安装源

  • official_releases 官方正式发行版

  • new_archive 新开发工具安装包

  • archive 旧开发工具安装包

  • ministro 迷你版,目前是针对 Android 的版本

  • linguist_releases 翻译工具发行版

  • learning 文档教程和示范视频

  • development_releases 开发版

  • community_releases 社区定制的 Qt 库

其中,archive,new_archive,official_releases中能下载到各种不同版本的Qt库、源码、开发工具。

在本教程用 Qt 5.11.3 版本作为开发环境,相关工具、源码的下载就以5.11.3来演示。

首先我们先下载 Qt工具集之一 Qt Creator

独立的Qt Creator(仅仅只有Qt Creator程序,不包含构建套件和Qt库) 下载地址: https://download.qt.io/official_releases/qtcreator/

qt_introduc005

里面分为Windows、Linux和macOS三个版本,从文件命名可以区分, exe表示Windows下的安装程序,run表示Ubuntu环境的安装程序,dmg适用于MAC OS。

带Qt库和构建套件的Qt Creator可以在new_archive中找到(这里的Qt库是x86架构的库,X86和ARM架构参考)。 下载地址:https://download.qt.io/new_archive/qt/

qt_introduc006

上面提到的Qt库是已经编译过的库,我们也可以下载Qt库的源码利用GNU编译工具链自己来编译安装Qt库。 我们使用的GNU编译工具链将决定Qt库能运行在那些架构的计算机(主要有x86和arm架构),Qt源码 下载地址:https://download.qt.io/new_archive/qt/5.11/5.11.3/single/

qt_introduc007

除了Qt库以外,我们还有很多Qt模块(组件),也可以通过下载源码,编译安装。 下载地址:https://download.qt.io/new_archive/qt/5.11/5.11.3/submodules/

qt_introduc008

1.3. LubanCat简介

LubanCat是野火开发的一系列微电脑板卡,它们搭载了LubanCat系统(LubanCat OS)。

LubanCat OS是野火基于Debian ARM架构制作的Linux发行版,为AI、工控、物联网、机器人以及编程教育等应用场景提供了便捷的示例和应用。

LubanCat OS继承了Debian ARM系统的便捷性,可以直接使用APT包管理工具直接安装Debian维护的软件, 如 Python、Opencv、Nginx以及 Docker 等软件,能轻松部署各种应用程序。

1.4. LubanCat+Qt=?

使用传统的PC开发与运行纯软件类型的应用程序也非常方便,但想要控制外部硬件或电气设备时, 就需要扩展IO卡、运动控制卡等专用硬件,昂贵且复杂。

而手机尺寸大小的LubanCat板卡,集成了IO、PWM、I2C、USB、网络等各种硬件控制与通讯接口, 能轻松与外部设备进行交互,而且功耗低、工业级的稳定性、性价比高等特点,非常适用于创客DIY、工控产品中。

Qt的一大特性就是 跨平台,无论是Windows,Ubuntu,ARM,都能很好的适配。LubanCat和Qt的结合又会碰撞出怎样的火花呢?

野火将基于LubanCat板卡,提供以下Qt应用开发示例:

  • 应用环境搭建

  • 文件管理

  • 音视频应用

  • 硬件控制应用示例