Qt教程一(一)

简介: Qt教程一(一)

Qt教程一(一)


Qt是什么?

Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。

Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要,Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样,好东西就会被派生扩展,到处使用, 越来越壮大。

Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。

Qt 可以做什么?

Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。

Qt 是应用程序开发的一站式解决方案,有了 Qt,你就可以高枕无忧了!Qt 本身包含的模块也日益丰富, 一直有新模块和第三方模块加入进来。

大部分应用程序都可以使用 Qt 实现,除了与计算机底层结合特别紧密的,例如驱动开发,它直接使用硬件提供的编程接口,而不能使用操作系统自带的函数库。

1997年,Qt 被用来开发 Linux 桌面环境 KDE,大获成功,使 Qt 成为 Linux 环境下开发 C++ GUI 程序的事实标准。

下面的程序都使用 Qt 开发:WPS、YY语音、Skype、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、VirtualBox、Opera、咪咕音乐、Google地图、Adobe Photoshop Album 等。

Linux 也是嵌入式的主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、航空航天、汽车电子、医疗设备、仪器仪表等相关行业。

Qt 虽然也支持手机操作系统,但是由于 Android 本身已经有 Java 和 Kotlin,iOS 本身已经有 Objective-C 和 Swift,所以 Qt 在移动端的市场份额几乎可以忽略。

总起来说,Qt 主要用于桌面程序开发和嵌入式开发。

Qt 的辛酸史

说到 Qt 的发展史,那真是一波三折,几经卖身。

Qt 最早是 1991 年由挪威的 Eirik Chambe-Eng 和 Haavard Nord 开发的, 他们随后于 1994 年 3 月 4 号正式成立奇趣科技公司(Trolltech)。Qt 原本是商业授权的跨平台开发库, 在 2000 年奇趣科技公司为开源社区发布了遵循 GPL(GNU General Public License)许可证的开源版本。

在 2008 年,诺基亚公司收购了奇趣科技公司,并增加了 LGPL(GNU Lesser General Public License)的授权模式。诺基亚联合英特尔利用 Qt 开发了全新的智能手机系统 MeeGo,可惜遭遇了微软木马屠城,诺基亚被迫放弃了 MeeGo, 而 Qt 商业授权业务也于 2011 年 3 月出售给了芬兰 IT 服务公司 Digia。

当然好消息是 Digia 于 2014 年 9 月宣布成立 Qt Company 全资子公司,独立运营 Qt 商业授权业务。目前 Qt 公司大力推广移动平台开发和商业应用, 总的来说 Qt 历经曲折,现在算是步入正轨了。

经过 30 多年的发展,Qt 已经成为最优秀的跨平台开发框架之一,在各行各业的项目开发中得到广泛应用。许多大型软件都是用 Qt 开发的,如 Autodesk Maya、Google Earth、Skype、WPS Office等。

永远不要忽视微软帝国的威胁,作为软件业的一代霸主,任何人都不要天真地试图和它做朋友,因为霸主不可能有朋友。微软的木马屠城是所有诺基亚人和芬兰人的痛,希望读者们都记牢这条。

Qt 和 KDE

之前提到 Qt 原本是商业授权软件,是怎么开源的呢?这就涉及 Qt 和 KDE 的纠葛了。

KDE 是 Linux 操作系统的桌面环境,与 GNOME 桌面是类似的,作为开源桌面它们竞争的情况更为多见。

KDE 是采用 GPL 许可证发布的开源软件,而最初 Qt 是商业授权的,存在商业侵权风险,GNOME 则是基于开源 GTK 库的,没有什么商业风险,这一度是 GNOME 优越于 KDE 的特性。

由于 Qt 的商业授权,KDE 社区一度混乱纠结,与此同时 GNOME 则如火如荼发展起来了。 KDE 毕竟算是亲儿子,被另一波人欺负,奇趣科技公司当然看不下去了,最后是奇趣科技公司为了赢得开发者的支持,为 Qt 增加了 GPL 的开源授权, 对于开源社区而言,遵循 GPL 使用 Qt 就不需要付费,这为 KDE 解决了燃眉之急。

之后 KDE 桌面和 GNOME 都发展壮大起来,都做得越来越好了。

GPL 和 LGPL

除了商业授权,目前 Qt 的开源授权有两种,一种是 GPL 授权,另一种是 LGPL 授权(诺基亚收购后新增)。

对这两种开源授权,简单来说,使用 GPL 版本的软件一定还是 GPL 的开源软件,无论是使用了 Qt 的程序代码还是修改了 Qt 库代码,都必须按照 GPL 来发布,这是 GPL 的传染性。

GPL 是什么都要开源,这对商业软件应用是不利的,所以诺基亚增加了 LGPL 授权 (第一个 L 可以叫 Lesser 宽松版或 Library 开发库版)。使用 LGPL 授权就可以利用 Qt 官方动态链接库,而不必开放商业代码。只要不修改和定制 Qt 库,仅使用 Qt 官方发布的动态链接库就可以不开源,这是商业友好的授权模式。

其实只要不是做商业,就不太需要关注用什么授权,以 GPL 授权发布程序代码就可以了。

如何选择开源协议

世界上的开源协议有上百种,很少有人能彻底搞清它们之间的区别,即使在最流行的六种开源协议——GPL、BSD、MIT、Mozilla、Apache 和 LGPL——之中做选择,也很复杂。

乌克兰程序员 Paul Bagwell 画了一张分析图,说明应该怎么选择开源协议,大家看了一目了然,真是清爽。

最后请认准 Qt 官方网站Qt官网

2.为什么用Qt?

用 Qt 来开发 Windows 桌面程序有以下优点:

简单易学:Qt 封装的很好,几行代码就可以开发出一个简单的客户端,不需要了解 Windows API。

资料丰富:资料丰富能够成倍降低学习成本,否则你只能去看源码,关于 DirectUI、Htmlayout、aardio 的资料就很少。

漂亮的界面:Qt 很容易做出漂亮的界面和炫酷的动画,而 MFC、WTL、wxWidgets 比较麻烦。

独立安装:Qt 程序最终会编译为本地代码,不需要其他库的支撑,而 Java 要安装虚拟机,C# 要安装 .NET Framework。

跨平台:如果你的程序需要运行在多个平台下,同时又希望降低开发成本,Qt 几乎是必备的。

Qt 和 MFC

读者经常将 MFC 和 Qt 进行对比,MFC 只能应用在 Windows 平台,而 Qt 是跨平台的,一次编写,到处运行。

另外,Qt 已经封装了底层细节,学习 Qt 将会非常简单;而 MFC 只是给 Windows API 加了一层包装,不了解 Windows API 也学不好 MFC,大家普遍反映 MFC 难学。

我们不能简单地说 Qt 好还是 MFC 好,两者都有用武之地;但是初学者学习 Qt 会比较简单,不用应付那些烦人的 Windows API,很快就能开发出带有漂亮界面的应用程序。

3.Qt Creator

Qt是开源的库 Qt Creator是一个集成开发环境

安装文档教程

安装视频教程

安装之后添加组件

1,找到Qt安装目录中的维护工具MaintenanceTool.exe

2,添加国内源

手动添加储存库要定位一个储存有QT在线安装镜像的地址,这可难坏我了,但是经过不懈努力还是被我找到了(网址:http://download.qt.io/static/mirrorlist/)这个网站,显示了各国的qt镜像站点,中国有四个,我用的是中科大的站,点击HTTP会进入一个网络文件夹。

然后依次进入/online/qtsdkrepository/windows_x86/root/qt/ 最终的文件夹显示如下,在这个界面复制一下当前地址框地址

编码问题

Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。

使用QtCreator创建的项目目录中不能包含中文和空格

QtCreator默认使用Utf8格式编码对文件字符进行编码

为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。GB2312 支持的汉字太少,1995年的汉字扩展规范GBK1.0,支持了更多的汉字。2000年的 GB18030取代了GBK1.0成为了正式的国家标准。Unicode 也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。

修改Qt Creator文件编码:菜单栏->工具->选项->文本编辑器->行为->文件编码

主界面

创建项目

  • 选择项目模板

  • 填写项目名称和选择路径(不能包含中文和空格不能包含中文和空格不能包含中文和空格~)

  • 定义编译系统(qmake即可)

  • 选择窗口类信息

  • 选择编译套件(用Qt Creator开发请选择MinGW Minimalist GNU for Windows)

项目文件

main.cpp

主函数所在的文件

#include "widget.h"       //生成的窗口类头文件
#include <QApplication>     //引用程序类头文件
int main(int argc, char *argv[])
{
    //创建应用程序对象, 在一个Qt项目中实例对象有且仅有一个
    // 类的作用: 检测触发的事件, 进行事件循环并处理
    QApplication a(argc, argv); 
    //创建窗口对象
    Widget w;
    //显示窗口
    w.show();
    //应用程序对象开始事件循环,保证应用程序不退出
    return a.exec();
}

widget.h

窗口类头文件

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>      //Qt标准窗口类头文件
class Widget : public QWidget //自己的类继承自Qwidget类
{
    Q_OBJECT          //使用信号与槽机制,必须包含该宏
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H

widget.cpp

窗口类源文件

#include "widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
}
Widget::~Widget()
{
}

HelloQt.pro

Qt项目文件,注释需要用#号

#项目编译时需要加载哪些模块
QT       += core gui
# 如果当前Qt版本大于4, 要添加一个额外的模块: widgets
# Qt 5中对gui模块进行了拆分, 将 widgets 独立出来了
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# 让Qt支持c++11标准
CONFIG += c++11
#如果您使用任何已标记为不推荐使用的Qt功能,则以下定义使您的编译器发出警告(确切的警告取决于您的编译器)。 
#请参考不推荐使用的API的文档,以了解如何将您的代码移植远离它。
DEFINES += QT_DEPRECATED_WARNINGS
#如果使用过时的API,您还可以使代码无法编译。
#为此,请取消注释以下行。
#您也可以选择仅在特定版本的Qt之前禁用已弃用的API。
#DEFINES + = QT_DISABLE_DEPRECATED_BEFORE = 0x060000    #禁用所有在Qt 6.0.0之前弃用的API
# 项目中的源文件 删除后,项目里不会显示所有的源文件
SOURCES += \
    main.cpp \
    widget.cpp
# 项目中的头文件
HEADERS += \
    widget.h
#部署的默认规则
qnx: target.path = /tmp/$${TARGET}/bin          #嵌入式
else: unix:!android: target.path = /opt/$${TARGET}/bin  #unix
!isEmpty(target.path): INSTALLS += target

pro是Qt的工程文件,这个文件是给qmake用来生成Makefile用的。

如果了解makefile的人应该知道,Makefile的三个关键点就是目标,依赖,命令。这里也很类似。pro文件中可以指明这个Qt项目的头文件,源文件,链接的外部库,目标文件名,模板(生成什么样的Makefile),版本配置(debug/release)等。

常用qmake变量

image.pngimage.png

image.png

项目操作

添加新文件

打开Qt项目

其他

常用快捷键

运行 Ctrl + r

编译 Ctrl + b

注释 Ctrl + /

字体缩放 Ctrl + 鼠标滚轮

查找/替换 Ctrl + f

整行移动 Ctrl + Shift + ↑ 或 ↓

自动对齐 Ctrl + i

帮助文档

第一种:Qt Creator 直接查看 F1

第二种:打开独立的帮助文档程序 assistant

同名.h 和 .cpp 之间的切换 F4

快速添加函数的定义 Alt + Enter 鼠标移动到函数申明上

修改变量名,并应用到所有用到该变量的地方 Ctrl + Shift +r

快速打开输出窗口 Alt + 数字键(1-8)

  • 书签功能,即在某行代码处进行标记,方便以后找到。书签也可以添加文字标注。
  • 按Ctrl + M 添加/删除书签
  • 按Ctrl + . 查找并移动到下一个标签

主题配置

萝卜白菜各有所爱,如何修改QtCreator的主题呢?

菜单栏->工具->选项->文本编辑器

上面是选择系统自带的,当然也可以自己配置一个,我这配置了一个Vs白色主题的。

xml文件 Visual studio white(Qt creator代码样式).xml

把该文件复制到Qt的安装目录下的->Qt\Qt5.14.2\Tools\QtCreator\share\qtcreator\styles目录中

最后进入文本编辑器选择

目录
相关文章
|
5月前
|
存储 缓存 自然语言处理
QT基础教程(QMap和QHash)
QT基础教程(QMap和QHash)
243 0
|
2月前
|
数据可视化 算法 C++
C++ cmake工程引入qt6和Quick 教程
C++ cmake工程引入qt6和Quick 教程
51 0
|
5月前
|
数据可视化 计算机视觉
QT基础教程(图形处理)
QT基础教程(图形处理)
33 0
|
5月前
QT基础教程(文本绘制)
QT基础教程(文本绘制)
49 0
|
5月前
|
存储 数据处理 数据格式
QT基础教程(文件操作深入)
QT基础教程(文件操作深入)
47 0
|
5月前
|
编解码 区块链 Windows
QT基础教程(QPalette和QIcon)
QT基础教程(QPalette和QIcon)
56 0
|
5月前
|
存储
QT基础教程(QT中的文件操作)
QT基础教程(QT中的文件操作)
43 0
|
5月前
|
开发者 索引
QT基础教程(布局管理器)
QT基础教程(布局管理器)
76 0
|
5月前
|
数据安全/隐私保护
QT基础教程(对话框2)
QT基础教程(对话框2)
34 0
|
5月前
QT基础教程(对话框1)
QT基础教程(对话框1)
34 0

推荐镜像

更多