1. QT|创建项目|代码解释|main.cpp|widget.h|widget.cpp|widget.ui|Empty.pro(C++)

创建项目

点击新建项目
![[Pasted image 20250315200117.png]]

选择项目模板
![[Pasted image 20250315200134.png]]

Application:应用程序,如果使用QT写一个GUI程序,就应该选这个
QT Widgets Application:图形应用程序项目模板
QT Console Application:控制台程序,TUI
QT Quick:是QT的一套新的用来开发GUI的方式;传统的即使QT Widget
选择QT Widget
![[Pasted image 20250315203825.png]]

选择构建系统
![[Pasted image 20250315203847.png]]

通过QT写的程序,涉及到一系列元编程技术,通过代码来生成代码
QT框架会在编译的时候,自动调用一系列的生成工具,基于写的代码,生成一系列其他的C++代码,最终编译的代码,也就是最后生成的这些代码
qmake是老牌的QT构建工具
cmake并非是QT专属,很多的开源项目都会使用CMake
Qbs是新一代的Qt构建工具
使用qmake
![[Pasted image 20250315204326.png]]

Base class:使用QT Creator创建项目,会自动生成一些代码出来,生成的代码包含一个类,此处就是要选择这个自动生成的类的父类是谁
![[Pasted image 20250315204438.png]]

QMainWindow:完整的应用程序窗口(菜单栏,工具栏,状态栏)
QWidget:表示一个控件(窗口上的一个具体的元素,输入框,按钮,下拉框,单选按钮,复选按钮)
QDialog:表示一个对话框
选择QWidget
![[Pasted image 20250315204651.png]]

此处生成的文件名是和类名关联的
这样的关联并非是强制的
Form file非常关键
QT中创建图形化界面的程序,有两种方式

  1. 直接通过C++代码的方式创建界面
  2. 通过Form file,以图形化的方式来生成界面
    此时,可以采用Qt Designer 或者直接使用Qt Creator来编辑ui文件,从而以图形化的方式快速方便地生成图形界面

选择翻译文件
![[Pasted image 20250315211736.png]]

选择基于哪个编译器的Qt SDK来构建后续代码
![[Pasted image 20250315211922.png]]

工程管理工具
![[Pasted image 20250315212038.png]]

选择git

![[Pasted image 20250315212433.png]]

Empty.pro:工程文件

点击运行空白文件
![[Pasted image 20250315212615.png]]

![[Pasted image 20250315212643.png]]

代码解释

main.cpp
#include "widget.h"
  
#include <QApplication>
  
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

argc:命令行参数的个数
argv[]:具体命令行参数的内容
main的形参就是命令行参数
创建了QApplication这样的一个对象,把argc和argv作为构造函数的参数传入
编写一个Qt的图形化界面程序,一定需要有QApplication对象
Widget:就是创建的时候生成的类名
创建一个控件对象,并显示出来
.show():让控件显示出来
.hide():让控件隐藏
Widge的父类是QWidget,都是QWidget提供的
.exec():表示让程序执行起来

Linux中的exec,进程程序替换,把可执行文件中的代码和数据,替换到当前进程中。
Qt中的exec和Linux中exec没有任何关系

widget.h
#ifndef WIDGET_H
#define WIDGET_H
  
#include <QWidget>
  
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
  
class Widget : public QWidget
{
    Q_OBJECT
  
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
  
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget类的声明
#ifndef WIDGET_H
#define WIDGET_H:header guard,保证头文件只能包含一次。更推荐写作#pragma once
一个Ui命名空间,和Form文件生成代码有关,差不多就是声明,声明了这个类class Widget
public QWidget:继承自QWidget,创建项目时选择的父类,是Qt SDK内置的,需要包含对应的头文件 #include <QWidget>
Qt的设定,使用Qt中内置的类,包含的头文件的名字就是和类名是一样的。不是用到的所有的Qt的类都需要显式包含头文件,C++中,头文件可能是间接包含的。
Q_OBJECT:是一个Qt内置的宏,本质上是文本替换,展开之后会生成一大堆代码。Qt中有一个非常核心的机制信号和槽,如果某个类想使用信号和槽,就需要引入Q_OBJECT这个宏
Widget(QWidget *parent = nullptr);
~Widget();:构造函数和析构函数
QWidget *parent = nullptr:Qt中引入了对象树机制,创建的Qt的对象,就可以把这个对象挂到对象树上,往树上挂的时候,就需要指定父节点。对象树就是一个普通的N叉树
Ui::Widget *ui:和form file密切相关

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;
}

#include "widget.h":创建项目生成的头文件
#include "ui_widget.h":form file被qmake生成的头文件

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

把form file生成的界面和当前widget关联起来

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

析构函数

widget.ui

![[Pasted image 20250315221440.png]]

直接双击ui文件,Qt Creator就会直接调用Qt Designer,打开ui文件,图形化的界面编辑器
![[Pasted image 20250315221244.png]]

左边一栏是Qt中内置的控件,可以直接拖拽左侧的控件到中间的程序窗口中,就可以创建出具体的界面。
右侧是编辑属性的区域,可以编辑控件的属性

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
 </widget>
 <resources/>
 <connections/>
</ui>

这个格式为xml格式,和html非常类似,都是使用成对的标签来表示数据
Qt中使用xml文件,是为了描述程序的界面是什么样子的,进一步qmake会调用相关的工具,依据xml文件生成一些C++代码,从而把完整的界面构造出来

Empty.pro
QT       += core gui
  
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 \
    widget.cpp
  
HEADERS += \
    widget.h
  
FORMS += \
    widget.ui
  
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

.pro:当前Qt项目的工程文件,也是qmake构建时候的重要依据
QT += core gui:要引入的Qt模块
CONFIG += c++11:编译选项

SOURCES += \
    main.cpp \
    widget.cpp
  
HEADERS += \
    widget.h
  
FORMS += \
    widget.ui

描述了当前项目中,参与构建的文件都有啥,编译器要编译的文件,类似于Linux中的makefile
qmake搭配.pro起到的作用和makefile类似。
Qt Creator把这个过程中编译的细节都封装好,只需点击运行按钮,就直接编译运行了

总结

.h .cpp .pro .ui都是源代码
编译运行Qt项目,构建过程中还会生成中间文件
打开文件资源管理器
![[Pasted image 20250315223050.png]]

![[Pasted image 20250315223206.png]]

![[Pasted image 20250315223453.png]]

在运行一次程序后,就会在项目目录并列的地方,多出来一个build目录。这个目录里就是该项目运行过程中,生成的一些临时文件。
![[Pasted image 20250315223649.png]]

编译Qt程序还是会用到maikfile。这个makefile是qmake自动生成的
ui_widget.h:就是xml文件生成的.h文件,是代码自动生成的。

/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 5.14.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
  
#ifndef UI_WIDGET_H
#define UI_WIDGET_H
  
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
  
QT_BEGIN_NAMESPACE
  
class Ui_Widget
{
public:
  
    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QString::fromUtf8("Widget"));
        Widget->resize(800, 600);
  
        retranslateUi(Widget);
  
        QMetaObject::connectSlotsByName(Widget);
    } // setupUi
  
    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
    } // retranslateUi
  
};
  
namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui
  
QT_END_NAMESPACE
  
#endif // UI_WIDGET_H

Qt自动生成的代码,会在setupUi方法中,生成出界面的具体细节
![[Pasted image 20250315224821.png]]

debug里的.exe就是可执行程序,可以点击运行
![[Pasted image 20250316100023.png]]

Qt Creator中创建项目可以通过使用向导或手动创建两种方式来完成。以下是详细的步骤说明: ### 使用向导创建项目 1. **打开Qt Creator**,在主界面选择 **"New Project"** 或者从菜单栏中选择 **【文件】-【新建文件或项目】** 菜单项。 2. 在弹出的 **"New Project"** 对话框中,选择 **"Qt Widgets Application"**,然后点击 **【Choose】** 按钮。 3. 在下一个对话框中,**设置项目名称和路径**,并按照向导的提示进行下一步操作。 4. **选择编译套件(Kit)**,这一步非常重要,因为不同的编译套件决定了项目将使用哪个版本的Qt库进行编译。 5. Qt Creator会自动为您添加以下文件: - `main.cpp`:应用程序的入口文件,创建主窗口并启动事件循环[^4]。 - `mywidget.cpp` 和 `mywidget.h`:实现和声明自定义窗口类的文件[^4]。 - `.pro` 项目文件:这是Qt项目的核心配置文件,由 `qmake` 工具解析,用于定义项目依赖、编译选项、源文件列表等[^4]。 6. 点击 **【完成】**,即可创建出一个Qt桌面程序。 ### 手动创建项目 1.Qt Creator中选择 **【其他项目】-【Empty qmake Project】**。 2. 点击 **【Choose】** 按钮后,设置项目名称和路径,并继续按照向导的提示进行操作。 3. 选择合适的编译套件。 4. 点击 **【完成】**。 ### 创建基于Qt Widget的应用程序 Qt Creator不仅支持创建通用项目,还特别适合用来开发基于Qt Widgets的应用程序。通过上述步骤创建项目,可以进一步扩展以包含更多的功能,例如: - 在 `widget.h` 文件中声明新的成员变量和函数,以支持额外的控件和事件处理[^4]。 - 在 `widget.cpp` 文件中实现这些新功能的具体逻辑,包括构造函数、信号槽机制等[^4]。 - 使用 `widget.ui` 文件,这是一个XML格式的界面布局文件,可以通过 **Qt Designer** 可视化设计窗口的按钮、布局等控件[^4]。双击该文件可以在Qt Creator中打开图形化编辑器,通过拖拽控件来设计界面。 ### 解决创建项目时的警告问题 如果在创建项目过程中遇到警告问题,可以尝试以下解决办法: - 进入 **Help -> About Plugins... -> C++ -> ClangCodeModel**,确保此插件已被启用[^5]。 通过以上步骤,可以顺利地在Qt Creator中创建项目,并利用其提供的强大工具和功能来开发跨平台的应用程序。 ```cpp #include <QApplication> #include "mywidget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值