Qt实践录:开篇

本系列文章介绍笔者的Qt实践之路。

背景

笔者首次接触 Qt 大约是十多年前,当时试用了 Qt ,觉得不如 MFC 好用。现在 Qt 的 API、文档等都比较完善,在年初决定重新拾起,正所谓技多不压身,将 Qt 当为一种谋生工具亦未尝不可。利用春节假期的集中时间,快速专攻一下。

本系列名为“Qt实践”,故不是教程,笔者对 Qt 的定位是“使用”,可以帮助快速编写日常的工具,如串口、网络等。所以不是以研究 Qt 机制或原理为目的的。代码片段有些是伪代码,有些是测试所用,有些是项目所用。

下载

Qt下载地址:http://download.qt.io/official_releases/qt,下载相应的 windows 或 linux版本,安装即可。网速快者可从官方下载,也可从国内镜像服务器(官方认证)下载。

本系列使用 Qt 5.14 windows 版本 + VS 2015 编译器。

本系列源码仓库: https://github.com/latelee/QtDemo

注意,为最大程度复用代码,各大窗体工程使用默认值,如类MainWindow表示QMainWindow,类Widget表示QWidget,类Dialog表示QDialog。对应的源文件、设计文件亦然。

修改编译目录

默认目录修改:

1
2
3
../%{JS: Util.asciify("build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}")}

./%{JS: Util.asciify("%{CurrentBuild:Name}")}

发布

添加环境变量:

1
D:\Qt\Qt5.14.0\5.14.0\msvc2015_64\bin

使用 windeployqt.exe 工具。

进入最终二进制文件目录,执行:

1
windeployqt.exe .

注:将拷贝大量的dll,体积较大。

TODO:打包为一个exe待实验。

使用经验

只改UI文件,不修改实现文件,运行时不会重新编译,还是旧程序。

先布局,再放控件。反之不行。控件已有响应代码,删除控件,再新加,改名为原有的,亦可用。

demo.pro.user 保留设置好的信息,如路径,版本管理时,不纳入,也不发布。否则,路径可能有问题(拷贝原工程到新目录,路径还是原来的)。将pro拖动到Qt Creator可打开。会重新生成pro.user文件。
pro文件名称即为工程名称,可以修改。

界面中文乱码:在头文件添加#pragma execution_character_set("utf-8")。源码保存为 UTF8 BOM格式。
错误:常量中有换行符。使用notepad++ 保存 UTF8 BOM格式。
qApp,指向 Application 的全局变量。可如此用:qApp->arg(0); qApp->quit(); qApp->exit(0);

主文件可使用默认名称,这样方便快速迁移、重建项目。如资源图标、主窗口初始化等常用的功能,无须手动再改。

编程备忘

自定义槽放到private slots:的开始处。因为自动添加的会自动放置后面。
自定义槽格式为:on_myXXX,信号为sig_myXXX。系统自动添加的形式为on_<控件对象名>_<控件事件名>,如按钮单击事件槽函数为on_btnSaveRecv_clicked
控件名称:

1
2
3
button:btn
checkbox:ckb
combobox:cbb(或lst)

信号与槽是 Qt 的特色,可类比 MFC 的消息响应机制。

Debug 工程的当前目录为工程根目录下的 Debug 目录。非工程根目录。

工程相关

Qt Creator 快捷键

alt+shift+r:预览界面
ctrl+r:运行
控件选择:单击控件或拖动鼠标选择控件。按Ctrl再单击多个控件选择。Ctrl+A 全选。(点击空白处取消选择)
上下左右光标:移动控件,间隙较大。
ctrl+上下左右光标:间隙较少(可用于精细对齐)
ctrl+shift+上下左右光标:调整大小,注:以控件左侧、顶部为基准。
不同控件,高度不同,可通过调整其某些控件的大小或精细调整位置实现对齐。
类似VS的多控件左右对齐:暂无。

工程文件.pro

QT += 后添加必须的 Qt 库。如核心库 core,GUI 界面库 network,串口库 serialport,网络编程 network。
DEFINES += 后添加宏定义,默认有 QT_DEPRECATED_WARNINGS
SOURCES源码,HEADERS头文件,FORMS界面设计文件。
RC_ICONS程序图标ico。
RESOURCES 资源文件。
win32: LIBS += 库文件。如 -luser32,系统级别库不用加路径。注:前面有 win32,可能涉及跨平台有用。
添加库: include (./subprj/subprj.pri)

需要说明的是,许多操作在 Qt Creator 中通过鼠标也可以完成(如添加库),熟悉或有一定工程模板后,建议直接复用pro文件,或在此文件中修改、增删。当pro文件更改时,稍等片刻,在 Qt Creator 左侧会自动更新。

新建工程

在已有工程基础上添加窗口类(包括UI界面文件、类文件):右键工程名称,“Add new…”,选择 Qt -> Qt 设计师界面类,修改类名,相应的UI文件、源码文件/头文件会自动变化。

Qt 学习、编码

Qt 的文档十分完善,其中 Qt助手(Assistant)包含了各个控件、API、枚举等的说明,而 Example 可以在 Qt Creator 欢迎页打开并编译。
Qt Creator 作为完整的 IDE,建议编写 Qt 程序时使用,当然也可以选用 VS Code 这样的编辑器。

待研究

运行依赖库
发布exe
子工程

布局自适应
窗口最大化、最小化、退出,ico。全屏。
多个设计文件,子窗口

多线程
拖动到窗口
系统托盘,右键
注册表
标题栏添加一个按钮,做置顶。
常用控件示例
messagebox

多窗口,多窗口数据交互