XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


QT项目

目录

QT项目

QQ图片20220913151322

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中