文章目录

  • 一、Qt是什么
  • 1. Qt与Qt Creator的关系
  • 2. Qt能做什么
  • 3. Qt/c++与QML
  • 二、如何选择Qt版本
  • 三、Windows下安装Qt
  • 四、Linux下安装Qt
  • 1.安装QT
  • 2. 配置Qt Creator输入中文
  • 1. 配置ubuntu中文环境
  • 2. 配置中文输入法
  • 五、Qt Creator简单实用
  • 1. Qt Creator界面组成
  • 2. Qt Creator设置
  • 六、第一个Qt程序
  • 1. 新建一个项目
  • 2. 项目文件介绍
  • 1. 项目文件*.pro
  • 2. 样式文件*.ui
  • 3. 头文件*.h
  • 4. 源文件*.cpp
  • 3. 修改ui文件显示hello world
  • 4. 项目编译&调试&运行


一、Qt是什么

Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面(Graphical User Interface,简称 GUI)程序。
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样,好东西就会被派生扩展,到处使用,越来越壮大。
Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。

简单的来说,Qt 可以做很多东西,好比如 Windows 下的软件也有很多是 Qt 开发的,这里我很喜欢它的一个特性就是跨平台使用,“跨平台”代表一份代码可以无需任何修改或者小修改就可以在其他平台上运行。

反正 Qt 就是您做界面需要选择的一个好工具!

1. Qt与Qt Creator的关系

2. Qt能做什么

理论上来说,您能想到的 App,Qt 它都基本能做。像 WPS 这种大型的桌面应用,Maya(3D 建模),一些游戏的内核都可以使用 Qt 来实现。甚至您能快速使用 Qt 来开发一款像酷狗,网易云音乐这样的音乐播放器。在嵌入式里,使用 Qt 来开发界面已经是无可替代的一种趋势。

工控界面最常用,一些移动端的界面也开始使用 Qt。像点菜机,温度采集数据显示,
汽车仪表,速度显示界面等。Qt 能做优美的界面,所以推出了 QML(一种描述性的语言)。每次 Qt 更新都有在 Quick(QML 使用的模块)上优化或者添加功能,看来 Qt 打算在移动设备端的开发市场端进军!

Qt 设计应该在界面上多下功夫,功能都是不难实现的,日后在大家会发现,设计界面占用的时间可能是 70%,写程序可能占 30%。大家应该在设计界面上多多下功夫!!!

3. Qt/c++与QML

QML 是 Qt C++基础上拓展的。也就是说 Qt C++上所使用界面的类,基本都是可以拓展到QML 上。如果不能拓展的,也可以直接 QML 与 C++一起使用。实际上 Qt C++效率更高。所以本教程都是 Qt C++为基础做教程入门教程,QML 可以说是一个加分项。

Qt QML 模块提供QML 语言开发应用程序和库提供了一个框架。QML 本身不涉及显示部分的内容,所以 Qt Quick模块充当了这部分的作用。至于他们三者的关系,我们就这样简单的了解一下就行了。Qt C++在底层编写功能更突出,若要做好看的界面且功能强大,Qt C++与 QML 语言结合是必不可少的。QML 语言负责界面层,而底层调用 Qt C++。比如文件的读写、图像处理、多线程通信等这些都是需要 C++来编写完成的。

在目前来说,Qt C++更成熟,QML 目前也比较成熟了,因为每次更新版本 QML 也有更新。不过在低版本的 Qt(如 Qt5.6 以下),QML 还不够成熟,QML 在高版本的 Qt(如 Qt5.7 以上)更成熟。C++依旧是 Qt 的主要编程语言,Qt 5 也并没有忽略它,Qt 5 添加了很多新的 C++ API,而且会持续更新。引入 QML 应该是 Qt 向移动端市场的一个突破,还有 python 和 javascript 都可以在 Qt 里用。
说了 C++又说 QML,但是 Qt 基础教程还是主打 Qt C++,有了基础学 Qt 里其他的东西就不难!

二、如何选择Qt版本

可以参考这个网址 https://doc.qt.io/qt-5/qt5-intro.html 来看看各个 Qt 版本的更新说明。

qt 和qt for Python模版的区别_linux


Qt6 已经出了,我们有必要直接上最新版本的 Qt6 吗?不!Qt6 理论上与 Qt5 能兼容,但是许多公司在用 Qt5 甚至 Qt4。学习了 Qt5,Qt6 等稳定版本出来,等市场上用的多,我们用 Qt6 才是最明智的选择,新出的事物往往要有一定的时间去适应!

我们主要是简单对整个 Qt 版本说明一下。首先,Qt 版本的升级肯定是对上一版本进行优化。比如 Qt4 与 Qt5 的的语法区别,Qt5 的信号槽写法与 Qt4的信号槽写法有区别。除了 Qt5.10 以上的版本,Qt5.6 与 Qt5.9 是 Qt 长期支持的版本 LTS(Long Term Support,简称 LTS)。但是 2020 年 3 月最近 Qt 官方将 Q5.2~Qt5.8、Qt5.11 归档到 http://download.qt.io/new_archive/qt/。所以很多小伙伴们想用老版本的 Qt 要到上面这个链接去下载了。

qt 和qt for Python模版的区别_QML_02


毕竟有些时候我们开发板程序处于某个 Qt 版本下开发的,如果要迁移到新版本的 Qt 可能还要考虑到兼容问题!不过变化不会很大的,请放心!

下面贴出 Qt 官方下载链接 http://download.qt.io/archive/qt/。我们直接进入这个链接可以看到下图。下图和上图加起来才是 Qt 的完整版本。那么多版本任君选择。还可以看到 Qt 版本在不断的更新,更多的功能将会注入到 Qt 这个 GUI 库里,使我们开发变得更简单和有趣!Qt6的时代即将到来!

qt 和qt for Python模版的区别_QML_03


理论上我们选择 Qt 的版本越新越好,这是当然的,不过我们还是要确定一个版本是必须的,因为日后写好的程序要长期运行在一个确定的版本里,避免随意升级带来其他兼容性问题,或者重复重复移植等工作。Qt 还会不断的更新,Qt5.9 及 Qt5.12 是两个 LTS 长期支持的版本,本教程以的 Qt5.12.9 版本进行开发及实验说明。

三、Windows下安装Qt

暂时不写

四、Linux下安装Qt

1.安装QT

参考之前的安装教程:
安装QT

2. 配置Qt Creator输入中文

1. 配置ubuntu中文环境

这一部分之前已经完成,没有完成的请自行百度(很多)。

2. 配置中文输入法

这一部分之前已经完成,没有完成的请自行百度(很多)。

虽然安装了中文输入法,但是QT可能还是不能输入中文。

作者为解决 Linux Qt Creator 不能输入中文的问题,已经编译过 fcitx 插件,已经上传到 Gitee仓库里,大家可以下载直接使用。
如果您没有安装 Git,请先使用下面的指令安装 Git。

sudo apt-get install git

使用下面的指令下载 Qt Creator 插件,本插件支持 Qt5,Qt4 没有测试过。本插件曾经在Qt5.5.1 上测试过,后来升级了 Qt 版本到 Qt5.12.9。Qt5.5.1 与 Qt5.12.9 这两个 Qt 版本的安装目录插件路径有变动(指版本相差大,安装路径有变动)。从 Gitee 下载的插件适用于 Qt5.12 版本左右版本。如果使用其他版本请自行修改 fcitx-install.sh 脚本里的安装路径!

git clone https://gitee.com/QQ1252699831/fcitx-qt5-1.1.1.git
cd fcitx-qt5-1.1.1

qt 和qt for Python模版的区别_嵌入式_04

直接执行脚本安装,原理是拷贝 fcitx-qt5-1.1.1 文件夹下里面的插件到 Qt Creator 的安装目录下。请注意个人安装 的 Qt Creator 路径,一定要与作者安装的路径一样,否则需要自己修改fcitx-install.sh 脚本里的路径!

这里不用修改QT路径,我们当时安装的就是这个目录

qt 和qt for Python模版的区别_嵌入式_05

./fcitx-install.sh

qt 和qt for Python模版的区别_QML_06


此时再重新打开 Qt Creator方可输入中文!如下图。需要按Ctrl+Space(空格键)激活输入法,再按 Ctrl+Shfit 切换输入法到五笔输入法。此时需要重新打开Qt Creator

qt 和qt for Python模版的区别_linux_07

五、Qt Creator简单实用

1. Qt Creator界面组成

启动Qt Creator后,Qt Creator的主界面如下图,默认打开的是欢迎页面。可以看到Qt Creator里自带很多示例。

qt 和qt for Python模版的区别_QT_08


在 Ubuntu 里,由于 Qt Creator 安装在/opt 目录下,这个目录普通用户是没有权限写的,只能够读。如果要打开示例先点击后选择“复制项目并打开”。作者比较喜欢 Qt Creator界面设计的。十分简洁,还自带示例,不会写也会参考!最重要的是 Qt Creator 里 左侧栏的“帮助”按钮,有很多使用说明,总结的非常好,对学习 Qt 的类有很大帮助,如果学习到某个方法或者类不会用,可以打开这个“帮助”来搜索这个类或者方法的用法。没有任何一本教程能有Qt 帮助文档这么详细了,可惜是英文的,初学者学起来还是会一定难度。多多参考这个 Qt 帮助文档,因为那里能学到很多,例子说明也特别多,每个方法、类、信号与槽等都有详细的解释。

单击 顶部工具栏的“帮助”菜单,点击“UI Tour”会出现介绍 Qt Creator 各组件的说明。这个大家一定要看看,虽然是英文的说明,但是大体有个了解。这里就不再截图说明了。后面编写第一个 Qt 程序也会说明整个项目编写及编译运行的流程。界面组成我们只需要了解这么多。

qt 和qt for Python模版的区别_linux_09

2. Qt Creator设置

Qt Creator 里的设置比较重要。在 Qt Creator 的设置里我们可以做些什么呢?我们一般会设置字体的大小、颜色和背景颜色等这样看起来比较炫,或者比较符合自己的风格。Qt Creator里也有很多主题,拥有好多种搭配,相信有一种是您喜欢的,如果不喜欢可以自定义里面的字体大小、颜色和背景颜色等。点击顶部的菜单栏的“工具”》“选项”。

qt 和qt for Python模版的区别_QML_10


打开选项后可以看到如下图的界面。(之前配置过)

qt 和qt for Python模版的区别_QT_11


下面我们主要介绍常用的几项:

  1. Kits:主要显示的是编译工具。我们在 Ubuntu 安装 Qt Creator 时,在安装选项里已经勾选了Desktop Qt5.12.9 GCC 64bit这个选项。所以在Kits这个页面就能检测到安装的编译工具。还有 Qt Versions 等项都可以自由查看。重要的是我们可以在这个 Kits 里配置 ARM 平台的编译工具(后面以某个 ARM 板卡平台为教程时有讲到如何配置),之所以 Qt 能够跨平台,是因为 Qt 有不同平台的编译工具。
  2. 环境:在这个项里可以设置不同的主题和语言等。Qt Creator 默认的主题和系统语言即可。
  3. 文本编辑器:可以设置文本编辑器的字体大小、颜色等。还可以设置某些类型的字体颜色,如关键字、字符串和注释等。
  4. 构建和运行:常用的是设置项目的目录。其他一般不用修改,默认即可。

六、第一个Qt程序

第一个程序都是以“hello,world”作为默认的第一个程序,我们延续这种经典的做法吧,感受程序的伟大。同时可以让我们初步了解 Qt 项目搭建的基础流程。

1. 新建一个项目

在 Ubuntu18 里打开 Qt Creator,找到 Qt Creator 的图标后点击打开。单击文件 Qt Creator 的文件,选择新建文件或者项目。注意有快捷键 Ctrl + N。直接在 Qt Creator 激活状态和英文状态的输入法下使用“Ctrl + N”也可以快速打开新建项目。

弹出的新建项目如下图,这里我们可以看到有很多模板(包括项目模板和文件和类模板)可以使用,包括 Qt,Qt Quick,Qt for Python,…,C++等等。作为初学者我们选择第一个Application(Qt)和 Qt Widgets Application,所谓的模板就是 Qt 为了方便开发程序,在新建工程时可以让用户基于一种模板来编写程序,包括 cpp 文件,ui 文件都已经快速的创建,而不用用户手动创建这些文件。这样对用户的开发带来极大的便捷。当然用户可以可以自己手动创建项目,一个一个往里面加也是可以的。但是初学者不建议这么做,我们的目的是先体验一遍项目搭建的流程,等日后有空再自己回头尝试这么做吧!

qt 和qt for Python模版的区别_Qt_12


如果您的输入法现在处于中文输入法,先按 Ctrl 再按 Space(空格)切换成英文输入法,在名称处输入项目为“01_hello_world”,这里的项目路径为编者个人的家目录路径下的 Qt 目录下,勾选设为默认的项目路径,这样以后做项目实验时都是默认选择这个目录作为项目路径而不用自己手动选择路径了。选择下一步。

qt 和qt for Python模版的区别_QML_13


默认已经是选择 qmake 编译,主要用 qmake 生成 Makefile 用于项目的编译。点击下一步即可。

qt 和qt for Python模版的区别_QML_14


这里默认选择的基类为 QMainWindow。在 Base class 一项中我们还可以看到还有 QWidget和 QWialog 这样的基类可以选择。在 C++篇我们已经学习什么叫基类,简单的来说,我们创建的这个项目是基于 QMainWindow 类去开发的。默认勾选“Generate form”,意思是生成 ui 窗体文件 mainwindow.ui。为了学习方便,我们统一默认基类为 QMainWindow,但是注意,在嵌入式里一般不需要标题栏,状态栏等,所以常用的是 QWidget 基类。

QMainWindow:主窗口类,主窗口具有主菜单栏、工具栏和状态栏。类似于一般的应用程序的主窗口。如果您想做个嵌套的窗口程序开发的软件,不妨选择这个 QMainWindow。
QWidget:是可视界面类的基类,也就是说QMainWindow类也是由QWidget继承封装而来。所以 QWidget 要比 QMainWindow 功能少一些。
QDialog:对话框类,建立一个对话框界面。比较少使用此项作为基类。一般以 QMainWindow和 QWidget 作为基类的居多。注因为 QWidget 不带窗口标题栏等,嵌入式里最好 QWidget。

qt 和qt for Python模版的区别_Qt_15


在高版本的 Qt Creator 里,有 Translation 这一项,Qt 提供了一个(.ts)的文件给您,.ts 是可读的翻译文件,使用简单的 XML 格式。我们暂时只需要知道这个东西是个可读的翻译文件即可。极少需要使用到。点击下一步。

qt 和qt for Python模版的区别_嵌入式_16


勾选编译器,这个编译器是我们在安装组件时选择的,使用这个编译器可以编译出 Ubuntu版本上跑的可执行程序。这么一说是不是觉得还能编译出其他平台的可执行程序?没错,假若我们现在有 ARM 平台的 Qt 编译器,那么选择 ARM 平台的 Qt 编译器即可编译出 Qt 在 ARM平台上的可执行文件(这里说的可执行文件类似 window 的 exe 程序文件一样,直接能够运行)。点击下一步。

(只选下面哪一个)

qt 和qt for Python模版的区别_嵌入式_17


到这里,Qt Creator 询问是否使用版本控制,如果您学习过像 Git 这样的版本控制工具,可以选择 Git,将您的项目使用版本控制。默认选择是无版本控制,直接点击完成即可。

qt 和qt for Python模版的区别_嵌入式_18


新建的“01_hello_world”项目如下。

qt 和qt for Python模版的区别_QML_19

2. 项目文件介绍

其中,左侧有上下两个子窗口,上面的窗口显示了项目的文件结构,显示当前的项目为“01_hello_world”,细心的还会发现“01_hello_world”是用粗体黑色标明。说明此项目是活动项目,活动项目的项目根节点都是用粗体字体表示的。如果打开了多个项目,那么我们只需要观察哪个是加粗的项目名就表示当前活动项目。

Qt Creator 和其他 IDE 开发软件一样。都是分组管理项目内的各种源文件,下面是项目内的文件简介。

01_hello_world.pro 是项目管理文件,这个项目管理文件十分重要,当您加入了文件或者删除了文件,Qt Creator 会自动修改这个*.pro 文件。有时候需要打开这个*.pro 文件添加我们的设置项。
Header 分组,这个节点下存放的是项目内所有的头文件*.h。
Source 分组,这个节点下存放的是项目内的所有 C++源码文件*.cpp。
Forms 分组,这个节点下是存放项目内所有界面文件*.ui。*.ui 文件由 XML 语言描述组成,

编译时会生成相应的 cpp 文件,这样交叉编译器就可以编译它了。

1. 项目文件*.pro

01_hello_world.pro文件如下所示。此pro文件在高版本的Qt与低版本的Qt文件有些区别,且在 Windows 与 Linux 系统下生成的 pro 也有些区别,但是变化不大。

1 QT += core gui
2
3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
4
5 CONFIG += c++11
6
7 # The following define makes your compiler emit warnings if you use
8 # any Qt feature that has been marked deprecated (the exact warnings
9 # depend on your compiler). Please consult the documentation of the
10 # deprecated API in order to know how to port your code away from it.
11 DEFINES += QT_DEPRECATED_WARNINGS
12
13 # You can also make your code fail to compile if it uses deprecated APIs.
14 # In order to do so, uncomment the following line.
15 # You can also select to disable deprecated APIs only up to a certain
version of Qt.
16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the
APIs deprecated before Qt 6.0.0
17
18 SOURCES += \
19 main.cpp \
20 mainwindow.cpp
21
22 HEADERS += \
23 mainwindow.h
24
25 FORMS += \
26 mainwindow.ui
27
28 # Default rules for deployment.
29 qnx: target.path = /tmp/$${TARGET}/bin
30 else: unix:!android: target.path = /opt/$${TARGET}/bin
31 !isEmpty(target.path): INSTALLS += target

第 1 行,添加了 Qt 的支持的模块,core 与 gui 库是 Qt 的默认设置。
第 3 行,比较 Qt5 版本,如果是 Qt5 版本,在 main.cpp 中 application 是在 QtWidgets 中的,因此要包含这个库。
第5行和第11行,分别配置的是使用c++11和添加QT_DEPRECATED_WARNINGS 定义。
第 18 行,SOURCES 下的是源文件。
第 22 行,HEADERS 下是头文件。
第 25 行,FORMS 下是 ui 界面文件。
第 28 行,部署默认的规则。
第 29 行,qnx:判断是不是 qnx 操作系统,赋值 target.path =/temp/$$TARGET}/bin。
第 30 行,如果是 unix 系统但不是安卓,赋值 target.path = /opt/$${TARGET}/bin。
第 31 行,如果 target.path 为空目录,赋值 INSTALLS += target。

如果需要修改生成目标的可执行程序名字,可赋值 TARGET = xxx。否则 TARGET 将默认取值为项目的名字。

2. 样式文件*.ui

mainwindow.ui 是一个 xml 类型的文件,它的 xml 内容如下。这个文件是生成的不能手动编辑。只能够通过图形界面修改其属性。

1 <?xml version="1.0" encoding="UTF-8"?>
2 <ui version="4.0">
3 <class>MainWindow</class>
4 <widget class="QMainWindow" name="MainWindow">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>800</width>
10 <height>600</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>MainWindow</string>
15 </property>
16 <widget class="QWidget" name="centralwidget"/>
17 <widget class="QMenuBar" name="menubar">
18 <property name="geometry">
19 <rect>
20 <x>0</x>
21 <y>0</y>
22 <width>800</width>
23 <height>28</height>
24 </rect>
25 </property>
26 </widget>
27 <widget class="QStatusBar" name="statusbar"/>
28 </widget>
29 <resources/>
30 <connections/>
31 </ui

双击 mainwindow.ui 后可以跳转到设计界面,如下图。下面主要介绍主体部分。

qt 和qt for Python模版的区别_QML_20

  1. ①是控件栏,有各种各样的控件,上方的 Filter 是过滤器,输入首写字母就可以快速定到我们想要找的控件。
  2. ②显示的是我们的窗口程序了,上面已经带有 MainWindow 对象及其几个子对象,默认MainWindow 就带有菜单栏和状态栏。
  3. ③是对象栏,②处用到的对象都在③处显示。
  4. ④是属性栏,点击③处对象栏的某个对象,就可以在④属性栏里编辑它的属性了。属性项有很多,包括位置,大小,文字,颜色,字体等等。

3. 头文件*.h

点击左边栏的编辑,回到项目的编辑工作窗口。点击项目下的 Headers 下的 mainwindow.h,mainwindow.h 一般有与之对应的一个 cpp 文件叫 mianwindow.cpp。其中 mainwindow.h 包含类的声明,mianwindow.cpp 包含类的实现。这与我们前面学习的 c++是一样的。

mainwindow.h 的内容如下。

1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5
6 QT_BEGIN_NAMESPACE
7 namespace Ui { class MainWindow; }
8 QT_END_NAMESPACE
9
10 class MainWindow : public QMainWindow
11 {
12 Q_OBJECT
13
14 public:
15 MainWindow(QWidget *parent = nullptr);
16 ~MainWindow();
17
18 private:
19 Ui::MainWindow *ui;
20 };
21 #endif // MAINWINDOW_

第 7 行,定义名称空间 Ui ,里面有一个类 MainWindow ,这个 MainWindow 和第 10 行里的 MainWindow 不是同一个对象。实际上,这个文件里的 MainWindow 类有一个成员*ui 就是指向第 19 行的 Ui::MainWindow 的指针。这都是为了使用.ui 文件设计界面的。
第 12 行,MainWindow 的声明中第一行是 Q_OBJECT,这是一个宏,由 Qt 进行处理,这也是 Qt 针对 C++扩展的地方,所有用到信号的类都要加这个宏。

4. 源文件*.cpp

点击项目下的 Sources 下的 mainwindow.cpp。可以看到它的内容如下。

1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3
4 MainWindow::MainWindow(QWidget *parent)
5 : QMainWindow(parent)
6 , ui(new Ui::MainWindow)
7 {
8 ui->setupUi(this);
9 }
10
11 MainWindow::~MainWindow()
12 {
13 delete ui;
14 }

第 2 行,MainWindow 的实现类中,第 2 行 include 了一个文件 ui_mainwindow.h 这个文件是 Qt 根据.ui 文件自动生成的,也就是说 ui_mainwindow.h 要点击编构建后才生成,我们才能看到这个文件。构建/编译后可以在 debug/release 的目录找到这个文件。
第 6 行,在 MainWindow 构造函数中用“ , ”隔开,new 一个 Ui 中的 MainWindow。这里是一种初始化成员的方法。
第 8 行,ui->setupUi(this);这句话是进行界面初始化,将 this(指的是 MainWindow 类的本身),作为参数传到 setupUi 里,ui 界面文件的对象会以 this 为父对象,所有子对象都将显示在MainWindow 里。我们要想使用 ui 里的对象,必须将代码写在 ui->setupUi(this)这句话之后,因为 ui->setupUi(this)会先初始化里面的对象,只有初始化里面的对象我们才能使用这个对象。
第 13 行,析构函数里 delete 掉 ui。在 Qt 里我们需要在析构函数里 delete 的对象一般是 new创建的并且没有父对象的对象。

小提示:this 在成员函数的开始执行前构造的,在成员的执行结束后清除。

点击项目下的 Sources 下的 main.cpp。可以看到它的内容如下。

1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }

第 3 行,包含 QApplication 类的定义。在每一个使用 Qt 的应用程序中都必须使用一个QApplication 对象。QApplication 管理了各种各样的应用程序的广泛资源,比如默认的字体和光标。
第 5 行,main()函数是程序的入口。几乎在使用 Qt 的所有情况下,main()只需要在把控制转交给 Qt 库之前执行一些初始化,然后 Qt 库通过事件来向程序告知用户的行为。argc 是命令行变量的数量,argv 是命令行变量的数组。
第 7 行,a 是这个程序的 QApplication。它在这里被创建并且处理这些命令行变量。
第 8 行,创建一个对象 w,这个对象就是 MainWindow。
第 9 行,调用方法 show()。这样程序界面才能显示。
第 10 行,这里就是 main()把控制转交给 Qt,并且当应用程序退出的时候 exec()就会返回。在 exec()中,Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。

3. 修改ui文件显示hello world

双击 mainwindow.ui,进入“Ui 设计器”页面如下。

qt 和qt for Python模版的区别_QML_21


可以看到中间的要设计的主窗体目前是空的,但是窗体上已经有好几个成员了,可以看到右边的对象栏,已经有 3 个对象成员在里面了,只是我们看不出来而已,效果不太明显。

我们要在窗体里显示“Hello World!”,那么需要使用左边的控件栏,目前左边的控件栏的控件有很多,也分很多类别。这些对于我们初学者来说,暂时不用知道它们是怎么用的。后面教程其中的类别进行说明它们是如何使用的。现在我们主要是想要显示“Hello World!”。要明白我们的主要目的,切勿看到左边的控件栏就想一个个的去试,又不知道怎么去用。这样的学习方式是不对的。要显示“Hello World!”,那么我们需要用常用的文本显示控件,常用的就是Label 文本控件了,当然 PushButon 按钮类也是可以显示文本的。但是我们不需要按钮的功能,只需要显示文本。所以用 Label 文本控件就可以了。

如下图,在左边的控件图,找到 Label 控件,Label 控件在“Display Widgets”(翻译为显示小部件)下,选中 Label 控件,将其拖至②处中间的设计窗体里。然后在③处选中 label 对象,再在④处 label 对象的属性栏找到 text 文件属性,修改里面的文本为“Hello World!”。这样我们就已经显示“Hello World”在窗口里了。当然双击中间的 Label 控件也是可以修改其文本属性的,对初学者来说还是按步骤修改,这样学习“Ui 设计器”是如何使用的。这里我们已经完成显示“Hello World!”的设计了。

qt 和qt for Python模版的区别_linux_22

4. 项目编译&调试&运行

我这里又重新创建了一个项目,去掉了ARM编译。

完成上面的“Hello World!”后,我们肯定下一步是想编译运行我们的程序了,看看效果如何!

按如下步骤,先返回编辑页面,再点击②处左下角的绿色三角符号(或者按 Ctrl + R 快捷键编译且运行),编辑时会输出编译信息,点击③处的编译输出窗口里,可以看到编译时的编译信息,能看到编译警告、编译错误、编译链接、相关编译器编译过程等

qt 和qt for Python模版的区别_嵌入式_23


在 Ubuntu 下刚装的 Qt Creator,毫无意外,第一次编译时会报“Cannot find -lgL”的错误。由于 Qt5.0 的库默认会链接到 OpenGL,但是在 Ubuntu 机器上没有安装 OpenGL,所以们需要在 Ubuntu 下安装 OpenGL Library。在 Ubuntu 终端下输入如下指令。

sudo apt-get install libglu1-mesa-dev

安装完成后,我们再点击左下角的绿色三角形试试,可以看到如下结果!在下图②处已经看到没有报错信息了。如果还有其他报错,建议回到第一章 C++环境设置里寻找 C++环境配置的相关指令安装好相应的库。可能初学者跳过了 C++就直接到 Qt 这部分了,Qt 也依赖 C++的环境的!

运行的结果如,弹出一个窗口,中间就是我们设计的 Hello World!

qt 和qt for Python模版的区别_Qt_24

如果需要调试,请先关闭上面的“Hello World!”窗口,点击右上角的“x”关闭即可!再按如下步骤点击,在程序里右键设置断点,再点击左下角③处的 Debug 绿色三角符号按钮。不过我们很少使用调试,这种简单的程序完全是可以预知它的运行过程的,如果我们想要知道它的运行过程,是可以使用这个调试的功能去了解 Qt 程序的运行流程的!

qt 和qt for Python模版的区别_linux_25