1.Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面(GUI)程序。
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;
Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、
访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
2.安装qt
wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run
chmod +x qt-opensource-linux-x64-5.12.9.run
sudo ./qt-opensource-linux-x64-5.12.9.run
3.新建一个项目
Console 用来创建控制台程序,Widgets 用来创建GUI程序。
1)QMainWindow:主窗口类,主窗口具有主菜单栏、工具栏和状态栏。 类似于一般的应用程序的主窗口。如果您想做个嵌套的窗口程序开发的软件,不妨选择这个 QMainWindow。
2)QWidget:是可视界面类的基类,也就是说 QMainWindow 类也是由 QWidget 继承封装而来。
所以 QWidget 要比 QMainWindow 功能少一些。
3)QDialog:对话框类,建立一个对话框界面。比较少使用此项作为基类。 一般以 QMainWindow和 QWidget 作为基类的居多。 注因为 QWidget 不带窗口标题栏等, 嵌入式里最好 QWidget。
4.qt工程说明
1)hello.pro 是项目管理文件,这个项目管理文件十分重要,当您加入了文件或者删除了文件, Qt Creator 会自动修改这个*.pro 文件。有时候需要打开这个*.pro 文件添加我们的设置项。
2)Header 分组,这个节点下存放的是项目内所有的头文件*.h。
3)Source 分组,这个节点下存放的是项目内的所有 C++源码文件*.cpp。
4)Forms 分组,这个节点下是存放项目内所有界面文件*.ui。 *.ui 文件由 XML 语言描述组成,编译时会生成相应的 cpp 文件,这样交叉编译器就可以编译它了。
5.项目文件*.pro
QT += core gui //添加了 Qt 的支持的模块,core与gui库是Qt的默认设置。
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //如果是Qt5版本,在main.cpp 中 application 是在 QtWidgets 中的,因此要包含这个库。
/* 配置 */
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
/* SOURCES下的是源文件 */
SOURCES += \
main.cpp \
mainwindow.cpp
/* HEADERS下是头文件 */
HEADERS += \
mainwindow.h
/* FORMS 下是ui界面文件 */
FORMS += \
mainwindow.ui
/* qnx:判断是不是 qnx 操作系统,赋值 target.path = /temp/$${TARGET}/bin。 */
qnx: target.path = /tmp/$${TARGET}/bin
/* 如果是unix系统但不是安卓,赋值 target.path = /opt/$${TARGET}/bin。 */
else: unix:!android: target.path = /opt/$${TARGET}/bin
/* 如果target.path为空目录, 赋值 INSTALLS += target。 */
!isEmpty(target.path): INSTALLS += target
6.样式文件*.ui
1) ①是控件栏,有各种各样的控件,上方的 Filter 是过滤器,输入首写字母就可以快速定到我们想要找的控件。
2) ②显示的是我们的窗口程序了,上面已经带有 MainWindow 对象及其几个子对象, 默认MainWindow 就带有菜单栏和状态栏。
3) ③是对象栏, ②处用到的对象都在③处显示。
4) ④是属性栏, 点击③处对象栏的某个对象,就可以在④属性栏里编辑它的属性了。 属性项有很多,包括位置,大小,文字,颜色,字体等等。
7.头文件*.h
点击项目下的 Headers 下的 mainwindow.h,mainwindow.h 一般有与之对应的一个 cpp 文件叫 mianwindow.cpp。 其中 mainwindow.h 包含类的声明, mianwindow.cpp 包含类的实现。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
/* 定义名称空间 Ui ,里面有一个类 MainWindow。
这个 MainWindow 和下面的 MainWindow 不是同一个对象。
这个文件里的 MainWindow 类有一个成员*ui 就是指向最下面的 Ui::MainWindow 的指针。这都是为了使用.ui 文件设计界面的。
*/
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
/* MainWindow 的声明中第一行是 Q_OBJECT,
这是一个宏,由 Qt 进行处理,这也是 Qt 针对 C++扩展的地方,所有用到信号的类都要加这个宏。 */
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
8.源文件*.cpp
1)Sources 下的 mainwindow.cpp
#include "mainwindow.h"
/* MainWindow 的实现类中,#include "ui_mainwindow.h"这个文件是 Qt 根据.ui 文件自动生成的,
也就是说 ui_mainwindow.h 要点击编构建后才生成,我们才能看到这个文件。
构建/编译后可以在 debug/release 的目录找到这个文件。
*/
#include "ui_mainwindow.h"
/* 在 MainWindow 构造函数中用“,”隔开,
new 一个 Ui 中的 MainWindow。
这里是一种初始化成员的方法。
*/
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
/* 将this(指的是 MainWindow 类的本身),作为参数传到setupUi里,ui界面文件的对象会以this为父对象,所有子对象都将显示在MainWindow里。
要想使用 ui 里的对象,必须将代码写在 ui->setupUi(this)这句话之后,
因为 ui->setupUi(this)会先初始化里面的对象,只有初始化里面的对象我们才能使用这个对象。
注:this 在成员函数的开始执行前构造的,在成员的执行结束后清除。
*/
ui->setupUi(this); //进行界面初始化
}
MainWindow::~MainWindow()
{
/* 析构函数里 delete 掉 ui。
在 Qt里我们需要在析构函数里 delete的对象一般是 new创建的并且没有父对象的对象。
*/
delete ui;
}
2)Sources 下的 main.cpp
#include "mainwindow.h"
/* 在每一个使用 Qt 的应用程序中都必须使用一个QApplication 对象。
QApplication 管理了各种各样的应用程序的广泛资源,比如默认的字体和光标。
*/
#include <QApplication>
/* argc 是命令行变量的数量,argv 是命令行变量的数组。 */
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //a 是这个程序的 QApplication。它在这里被创建并且处理这些命令行变量。
MainWindow w; //创建一个对象 w,这个对象就是 MainWindow。
w.show(); //调用方法 show()。这样程序界面才能显示
/* 这里就是 main()把控制转交给 Qt,并且当应用程序退出的时候 exec()就会返回。
在 exec()中, Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
*/
return a.exec();
}