时间是人类生活的空间,我们在时域上展开生活,构建自己的世界
零|说明
本文面向初学者介绍Qt5开发,不求全面
但求过程完整
每个步骤只说明【一种】操作方式
代码和操作并重
在给出代码的同时介绍开发环境的使用
力图使读者能较容易地【复现】任务
快速熟悉从【开发意图】到【打包发布】的一整套开发流程
一|任务导向
本文向Qt初学者介绍开发一款自定义的Notepad,也就是仿照Windows自带的记事本小应用的流程。
主界面如下:
界面说明
1:自定义的窗口图标,运行时在任务栏中显示的图标与之一致;
2:自定义窗口标题;
3:自定义工具栏,使用了自选的矢量图标;
4:将多个txt文档嵌入到同一个窗口中。
对初学Qt的朋友而言,首先要做的是熟悉Qt的开发环境,为了让读者把精力集中到开发技术的学习上,本文只介绍Qt Creator这种官方提供的集成开发环境(IDE)进行开发的过程。
二|认识Qt Creator开发环境
初见
不了解Qt Creator的朋友可以自行检索或到Qt官网了解。这里只需要知道,我们将使用这个工具完成接下来的开发就行了。
Qt Creator的下载和安装
1、官方通道下载速度比较着急,最好使用国内镜像源。找不到镜像源的额朋友可以参考我这篇文章:https://blog.csdn.net/qq_33904382/article/details/108632625
通过这篇文章介绍的告诉下载链接,可以很快下载完成,节省不必要的等待时间。
2、安装全程跟随安装引导点点点即可,略感困难的朋友可以参考我这篇文章:https://blog.csdn.net/qq_33904382/article/details/108643419中的图例,对照着完成Qt的安装。
新建工程
在Qt Creator中建立工程文件和在其他开发环境中类似,这里可以参考这篇文章:https://blog.csdn.net/qq_33904382/article/details/108743493建立一个名为Notepad
的工程。
注意我们在Kits
这个步骤和链接文章中不同,我们在这里选择的编译工具是MinGW 32bit
,这和编译以及打包发布有较大关联。为了避免不必要的麻烦,建议初学的朋友和本文保持一致。
查看工程内容
建立工程后,会自动打开,Qt Creator切换到Edit界面:
上图显示了工程中自动生成了一些文件,单击左下角的绿色三角形图标,这个工程将进行编译、链接(编译链接的进度将被实时显示在右下角的方条中),然后运行。在屏幕上出现一个空白的窗口:
我们将对工程中的这些文件进行编辑,从而把窗口内容打磨成我们想要的样子。
所以,首先要认识一下工程中的这些文件:
一个工程文件:Notepad.pro
这个文件和工程为一些配置有关,在本文的开发过程中不会用到。我们将在打包发布的阶段对它进行必要的编辑。
一个主文件:main.cpp
这个文件和进行纯c/c++的代码编写时有所不同。为了削弱朋友们的陌生感,本文将逐行地介绍一下这个文件。但仅供了解,不必深究。
主c文件内容:
#include "notepad.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication EditorApp(argc, argv);
Notepad Editor;
Editor.show();
return EditorApp.exec();
}
逐行解析:
最开始的两行用于引用notepad.h
和QApplication
这两个头文件。QApplication
是Qt库的一个头文件,所有的Qt类都有对应的头文件。
#include "notepad.h"
#include <QApplication>
这行是定义了主函数。和纯c/c++开发一样,使用Qt开发环境编写的整个程序也是从这个函数开始执行。
int main(int argc, char *argv[])
这一行使用主函数的参数,创建了一个EditorApp对象。这是Qt程序的主函数中的固定操作,不必细究。
QApplication EditorApp(argc, argv);
下面这行声明了一个在mainwindow.h
和mainwindow.cpp
中定义的那个Notepad
类的对象Editor
,我们编辑的主要对象。
Notepad Editor;
下面这行代码让我们编写的这个窗口显示在屏幕上。
Editor.show();
最后一句代码让程序进入Qt的事件循环,也就是窗口一直运行着,等待我们的各种操作,并根据我们在代码中的设定做出响应。
return EditorApp.exec();
逐行解析结束
一个后缀为ui的文件:mainwindow.ui
除了使用代码编辑,我们还可以通过这个文件对窗口的界面进行设计和改动。
而且借助开发环境中集成的Qt Designer
,我们可以使用鼠标进行可视化编辑。双击这个ui
文件即可打开Qt Designer
界面,具体在第四部分熟悉Qt designer和窗体UI编辑方法
中介绍。
三|了解Qt的混合开发模式
有的初学者认为应该使用纯代码编辑窗体,诚然,这是可以的,但确实不推荐。
因为窗体的大小通常可以变化,所以想要保持一定风格的界面,窗体上的按钮等控件的位置也就应该随着窗体的变化。这样就需要许多与界面相关的代码。
所以实际上,我们通常用Qt designer这个工具对窗体的界面进行可视化的编辑,代码部分只用来完成槽函数和对事件的响应。
这也就是所谓的Qt的混合开发模式。
四|熟悉Qt designer和窗体UI编辑方法
鼠标双击工程目录中的mainwindow.ui文件,Qt Creator会自动转到Qt designer,如下图所示:
中间白色背景区域就是窗体显示区域,灰色的方框就是窗体mainwindow,因为我们还没有为它添加控件,此时上面时空白的。
比较一|任务导向中的效果图,我们先准备在顶部给它加上一排工具栏。
1、在窗体上单击右键
2、在弹出的选项框中选择add toolbar(添加工具栏),单击左键
可以看到窗体顶部多了窄窄的一栏,右上角的元素框(上图右边那个红色圈中)中也显示出窗体上有一个名为toolbar
的控件。这个名字是可以修改的,我们现在不管这些细节。
当然,这和我们想要的工具栏还是不同,现在我们让它看上去好一点,具体来说有两个步骤:
1、为工具栏添加一些action
2、为action设置图标,让它更好看一些
第二个步骤我们将在六|资源文件和自定义图标中说明,这一部分我们先考虑怎么让工具栏有一些像按键的东西,并且让这些“按键”被按下去后发生一些我们设想的事情。
为工具栏添加action
(1)新建action
首先就是新建acition吧,怎么做?
单击Qt designer底部的新建action按钮(上图中圈中的位置),弹出一个窗口:
在Text一栏中填写New,然后单击OK按钮,新建一个名为New的action:
可以看到,action栏中已经显示出这个actionNew
的属性。
(2)把action添加到工具栏中
这步很简单,直接用鼠标把action拖到工具栏中即可。
使用同样的步骤,再为工具栏添加Open、Save、Exit、Paste、Redo、Undo等action。完成后形如下图这样,这个图里的窗口有两个工具栏,你也可以只用一个:
上图白色框是一个textedit控件,添加方法就是在Qt designer左侧的控件列表中找到textedit,拖入窗体范围即可。
到这里我们就把单个窗体的界面做完了,接下来看mainwindow所谓代码部分:
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class Notepadx;
}
class Notepadx : public QMainWindow
{
Q_OBJECT
public:
explicit Notepadx(QWidget *parent = nullptr);
~Notepadx();
private slots:
void newDocument();
void open();
void save();
void saveAs();
void print();
void exit();
void copy();
void cut();
void paste();
void