文章目录
由于每次代码都是在原有程序上修改,因此除了新建项目,不然一般会在学完后统一展示代码。
一、QT 安装
- 本人直接用同学的安装包进行安装的,版本为 QT5.12 。大家可以在 CSDN 或者 B站 上看别人的安装教程,都做的很详细。
二、为什么学 QT
- 学习GUI编程,市场上任何一款产品几乎都带图形界面,市场上很火的 Android 、IOS 编程无非也是 GUI app 编程,GUI 编程都是差不多,学习QT 后再学习 Android、IOS,会比较轻松。由于 QT 跨平台特性,通过 QT 写的程序可以在 Android、IOS平台上运行。
- 锻炼编程能力,GUI 编程比后台编程更能锻炼人,因为除了核心数据处理外,还需要协调界面,同时懂得前端和后台编程,才能更好地写好程序。
- 为了更好地使用 C++ ,学习 QT 的框架(QT 是 C++ 实现的应用程序框架),很多游戏、后台服务器框架都是使用 C++ 实现。
- QT 的良好封装机制使得 QT 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。QT 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单。
- QT 包括多达 250 个以上的 C++ 类,还提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理功能。
三、QT 应用程序框架
1. QT Creater
2. 新建一个 QT 应用程序
- 我们一般选用 QWidget。
3. QT 代码框架详解
- 具体解释均已注释在代码当中。
3.1 main.cpp
#include "mywidget.h"
// QApplication 是应用程序类
// QT 头文件没有 .h
// 头文件和类名一样
#include <QApplication>
int main(int argc, char *argv[])
{
// 固定框架,有且只有一个应用程序类的对象
QApplication a(argc, argv);
// myWidget继承于QWidget,QWidget是一个窗口基类
// 所以myWidget也是窗口类
// w就是一个窗口
myWidget w;
// 窗口创建默认是隐藏的,需要人为显示
w.show();
// a.exec()让程序一直执行,等待用户操作
return a.exec();
}
3.2 myWidget.h
//快捷键 f4 可以跳转对应的 .c 文件。
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
class myWidget : public QWidget
{
Q_OBJECT // 信号与槽的时候需要
public:
myWidget(QWidget *parent = 0);
~myWidget();
};
#endif // MYWIDGET_H
3.3 day1.pro
# 一个程序对应一个 .pro 文件,在 .pro 文件当中,注释是 #
# 模块
QT += core gui
# 高于4版本,添加 QT += widgets,为了兼容 QT4
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# 应用程序的名字
TARGET = day1
# 指定 makefile 的类型,app
TEMPLATE = app
# 源文件 .cpp 文件
SOURCES += \
main.cpp \
mywidget.cpp
# 头文件 .h 文件
HEADERS += \
mywidget.h
4. QT 基本模块
四、第一个 QT 程序
1. 准备工作
1.1 项目创建
- 这里需要注意:
- 后续步骤与前文相同。
- 后续添加 C++ 源文件和头文件步骤与 VS2022 相同,在此不过多叙述,需要注意源文件是 .cpp,头文件是 .h 。
1.2 主函数框架测试
2. 设置窗口标题
2.1 main.cpp
#include <QApplication>
#include <QWidget> //窗口空间基类
int main(int argc,char **argv)
{
QApplication app(argc,argv);
QWidget w;
w.setWindowTitle("主要看气质"); //设置标题
w.show();
return app.exec();
}
2.2 运行结果
3. 添加按钮
3.1 main.cpp
- 知识点和注意事项以注释的方式在代码当中。
#include <QApplication>
#include <QWidget> //窗口空间基类
#include <QPushButton> //按钮
int main(int argc,char **argv)
{
QApplication app(argc,argv);
QWidget w;
w.setWindowTitle("主要看气质"); //设置标题
// 如果不指定父对象,对象和对象(窗口和窗口),没有关系,是独立的。
// a指定b为它的父对象,即a放在b上面。
// 指定父对象:1. setParent; 2. 通过构造函数传参
// 指定父对象,只需要父对象显示,上面的子对象自动显示
QPushButton b;
b.setText("^_^"); //给按钮设置内容
b.setParent(&w); //指定父对象
b.move(100,100); //移动坐标,以窗口左上角为起点,以像素点为单位
QPushButton b1(&w);
b1.setText("abc"); //给按钮设置内容
w.show();
return app.exec();
}