QT之初始代码理解

main.cpp

#include "widget.h"

#include <QApplication>

/*          1.Qt系统提供的类头文件没有.h后缀
            2.Qt一个类对应一个头文件,类名和头文件名一致    */

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

 /*QApplication应用程序类,管理图形用户界面应用程序的控制流和主要设置。
     * 是Qt生命,一个程序要确保一直运行,就肯定至少得有一个循环,这就是Qt主消息循环,在其中完成来自窗口系统和其它资源的所有事件消息处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。
     *
     * 定义一个 Qt 应用程序对象,它的构造函数接收和 main 函数一样的参数,是 Qt 图形界面程序的入口,就像 main 函数是普通 C++ 程序的入口一样。
     * QApplication包含窗口系统和其他来源处理过和发送过的主事件循环。它也处理应用程序的初始化和收尾工作,并提供对话管理。QApplication可以对系统和应用的大部分设置项进行设置。
     * 对于用Qt写的任何一个GUI应用,不管这个应用有没有窗口或多少个窗口,有且只有一个QApplication对象*/


    Widget w;/*一个窗口被创建(默认隐藏)*/
    w.show();/*通过SHOW的方式显示出来*/

    return a.exec();

    /*常见的c/c++语言main函数中都是直接return 0 的,程序直接退出。但图形程序通常需要与用户交互,不会自动关闭,而是一直等待用户操作。如果用户点击窗口的关闭按钮, 程序才会结束并返回一个值,默认是 0 。
     * qt中main函数开始就只是进行一个初始化工作,然后将控制权交给qt,接下来所有事件的处理就只剩下qt的事件循环处理了。
    a.exec()程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。
    在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。 */
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

/* 这段代码是一个构造函数,用于创建Widget对象并初始化U!界面。在这个构造函数中,我们首先调用了QWidget类的构造函数,将父类指针parent传递进去,然后创建了一个新的Ui:Widget对象ui,并调用了它的setupUi()函数,将Ul界面设置到Widget对象上。
具体来说,ui对象是在Widget类中定义的一个指向Ui:.Widget的指针,Ui:Widget是通过Qt Designer自动生成的头文件,它包含了U!类的定义,其中包括了U!界面上所有控件的声明和初始化。在调用ui->setupUi(this)函数时,会将U!界面上所有控件与Widget对象上的对应控件进行连接,从而完成UI界面的初始化。
需要注意的是,这个构造函数是自动生成的,你不需要手动编写它。如果你在Qt Designer中设计了U界面,并将U!文件添加到了工程中Qt Creator会自动为你生成这个构造函数。*/

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

/*QT_BEGIN_NAMESPACE 和 QT_END_NAMESPACE 是 Qt 库中用于命名空间管理的关键宏定义,目的是为了避免全局命名冲突。在 Qt 中,许多类和函数都被组织在命名空间(namespace)里,这样可以保持代码的清晰和模块化*/
/*QT_BEGIN_NAMESPACE 开始了一个名为 Qt 的命名空间,这个命名空间包含了所有 Qt 内置的类、函数和类型。当你在代码中使用 Qt 命名空间下的内容时,需要先用 :: 运算符引入命名空间,例如 Qt::Widgets。*/
/*QT_END_NAMESPACE 宏用来结束当前的 Qt 命名空间,意味着后续的代码将不再受 Qt 命名空间的影响,除非再次显式地包含它*/
/*Ui 前缀通常用于表示 UI(用户界面)相关的命名空间,是某个自定义 UI 类库的一部分。class Widget; 可能是指定的一个名为 Widget 的类,但在这个上下文中,它实际上是一个声明,告诉编译器将来会有一个名为 Ui::Widget 的类定义。*/

class Widget : public QWidget
{
    /*引入Qt信号和槽机制的一个宏*/
    Q_OBJECT

public:
    /*构造函数中parent是指父窗口,如果parent是0,那么窗口就是一个顶层的窗口*/
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

.pro

#引入Qt的模块
QT       += core gui
QT       += serialport


#如果qt版本大于4,那么引入widgets模块,#生成最终文件的文件名,可执行文件exe
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

#让Qt5默认支持C++17
CONFIG += c++17

#QT加载静态链接库(.Lib,.a,.os),以及关于LIBS +=的用法
#参考:https://blog.csdn.net/weixin_42156552/article/details/121871417
LIBS += -lwinmm



# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

#DEFINES += QT_DEPRECATED_WARNINGS

#指定生成的文件名
#TARGET = GeneralTestTOOL

#指定qmake生成的makefile类型
#TEMPLATE = app

#要编译的源文件列表
SOURCES += \
    main.cpp \
    serial_set.cpp \
    widget.cpp

#要编译的头文件列表
HEADERS += \
    serial_set.h \
    widget.h

#要编译的Ui文件列表
FORMS += \
    serial_set.ui \
    widget.ui


UI_DIR=./UI

# Default rules for deployment.部署默认规则
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


RESOURCES += \
    beijing.qrc \
    xiaoxin.qrc


#warning: unused parameter ‘arg1′ [-Wunused-parameter]
#函数参数未使用的警告,屏蔽掉这种警告:
#一种是在在提示警告函数里面添加Q_UNUSED(arg1);  arg1是定义没有使用的参数;
#还有下面这种整体编译屏蔽掉的语句.
QMAKE_CXXFLAGS +=  -Wno-unused-parameter

#/* .pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。类似于VS中的.sln 和vsproj文件。*/
#.pro文件的规则:


#/* .pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。类似于VS中的.sln 和vsproj文件。*/


#.pro文件的规则:

#1.注释
#           从“#”开始,到这一行结束。

#2.模块引入

#           QT += 模块名,表示当前项目引入Qt哪些模块。
#           引入模块的意思就简单理解为引入C/C++头文件搜索路径,如果没引入对应模块就使用该头文件的话会报错说找不到该头文件。当然不必要的模块还是别引入,因为引入模块不仅仅是引入头文件搜索路径那么简单,还包括引入连接的库等一系列操作,会让程序变臃肿。

#3. 模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE = app

#           app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
#           lib - 建立一个库的makefile。
#           vcapp - 建立一个应用程序的VisualStudio项目文件。
#           vclib - 建立一个库的VisualStudio项目文件。
#           subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。

#   4.指定生成的应用程序名:
#           TARGET = QtDemo
#   5.工程中包含的头文件
#           HEADERS += include/painter.h
#   6.工程中包含的.ui设计文件
#           FORMS += forms/painter.ui
#   7.工程中包含的源文件
#          SOURCES += sources/main.cpp sources
#   8.工程中包含的资源文件
#           RESOURCES += qrc/painter.qrc

#   9.greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#   这条语句的含义是,如果QT_MAJOR_VERSION大于4(也就是当前使用的Qt5及更高版本)需要增加widgets模块。如果项目仅需支持Qt5,也可以直接添加“QT += widgets”一句。不过为了保持代码兼容,最好还是按照QtCreator生成的语句编写。

#   10.配置信息
#   CONFIG用来告诉qmake关于应用程序的配置信息。
#          CONFIG += c++11 //使用c++11的特性(qt5.6以上版本默认使用C++11)
#          在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项更安全。

#2.4 命名规范
#       类名:单词首字母大写,单词和单词之间直接连接,无需连接字符 。
#       函数名字,变量名:首字母小写,之后每个单词首字母大写,单词和单词之间直接连接,无需连接字符

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值