QT项目
Base class有三个选项
- QMainWindow:
分为三层, 上面是菜单栏, 下面是状态栏
- QWidget:
是一个空白的窗口, 嵌入式使用的最多
- Qdialog
有几个按钮的窗口, 是一个对话框
实际的关系是QWidget是父类, 别的两个是子类
项目文件
- 首先是一个工程文件.pro
# 包含的模块, 一个是模型一个是图形界面
QT += core gui
# 版本大于4的话加入这个模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
# 源文件
SOURCES += \
main.cpp \
myvidget.cpp
# 头文件
HEADERS += \
myvidget.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
在文件中有一个宏
QT += core gui
这是文件默认添加的模块, 之后在文件中添加头文件就可以使用了
之后还会定义文件的版本检查
编译的文件
可以使用TARGET进行定义生成的文件的名字
TEMPLATE: 创建的模板的名字一般使用app
启动流程
#include "mywindows.h" //我自己创建的类
#include <QApplication> //包含一个应用程序的头文件
//程序的入口
int main(int argc, char *argv[])
{
//把命令行参数传递给这个类, 这是一个应用程序对象, 有且只有一个
//这个类是用来管理设置Qt程序的运行, 针对QWidget应用程序
QApplication a(argc, argv);
//自定义的类, w是创建的对象, 是一个窗口
MyWindows w;
//对象调用函数, 默认不会显示, 使用show才会进行显示
w.show();
//调用的是一个事件循环, 等待鼠标键盘等的输入
return a.exec();
}
管理使用的类
QApplication
QGuiApplication 针对非QWidget程序, 比如QQuick
QCoreApplication 针对的是没有界面的应用程序
头文件
#ifndef MYWINDOWS_H
#define MYWINDOWS_H
// 添加的窗口的类
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MyWindows; }
QT_END_NAMESPACE
class MyWindows : public QMainWindow
{
//这是一个宏定义, Qt信号槽需要这个, 允许类中使用信号和槽的机制
Q_OBJECT
public:
//两个函数, 构造函数, 析构函数
MyWindows(QWidget *parent = nullptr); //默认设置一个父类
~MyWindows();
private:
Ui::MyWindows *ui;
};
#endif // MYWINDOWS_H
#include "mywindows.h"
#include "ui_mywindows.h"
#include <QDebug>
MyWindows::MyWindows(QWidget *parent)
: QMainWindow(parent) //初始化父类
, i(4)
, ui(new Ui::MyWindows)
{
ui->setupUi(this);
qDebug() << "构造函数执行" <<endl;
}
使用qDebug()进行打印, 使用setupUi函数和ui文件进行联系
常用的快捷键
- Ctrl + n 新建项目
- Ctrl + r 运行项目
- Ctrl + b 构建项目
- F1 帮助文档
- Ctrl + 滚轮 字体大小
- Ctrl + A Ctrl + I 代码对齐
- Ctrl + Shift + Enter 上面加入新行
- Ctrl + Enter 下面加入新行
- Ctrl + Shift + ↑ 代码上移
- Ctrl + Shift + ↓ 代码下移
- Ctrl + Shift + PgUp 这一行代码复制到上面一行
- Ctrl + Shift + PgDn 这一行代码复制到下面
- Ctrl + 点击 跳转到定义
- Alt + ← 返回
- Ctrl + Shift + T 查看一个类的层次
- F4 头文件源文件之间来回切换
规范
文件的命名:使用小写字母,可以有大写字母,windows文件不区分大小写, 文件名和文件中的类名一样
下载的文件的源码在文件/opt/Qt5.12.9/5.12.9/Src文件夹之中
类名:单词的首字母大写
函数名:除了构造函数,析构函数成员函数的首字母小写,单词之间的字母大写
成员变量:首字母小写,单词之间的字母大写
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
实际使用的函数
sender 是发射信号的对象的名称,signal() 是信号名称。信号可以看做是特殊的函数,需要带括号,有参数时还需要指明参数。receiver 是接收信号的对象名称,slot() 是槽函数的名称,需要带括号,有参数时还需要指明参数。
生成的代码在文件mainwindow.h中