首页 > 其他分享 >【Qt】创建一个新项目 &&解析项目代码

【Qt】创建一个新项目 &&解析项目代码

时间:2024-09-28 10:23:05浏览次数:9  
标签:widget Qt 项目 代码 Widget qmake 生成 &&

这里写目录标题

1. QtCreator创建项目

首先我们要创建一个项目

  1. 点击左上角的文件
  2. 创建新文件
  3. 择Application中的Qt Widgets Application方式进行创建

在这里插入图片描述
新建项目对话框里有五类项目模板模板:

项目模板说明
ApplicationQt 应用程序,包括普通窗体程序和 Qt Quick 程序
Library可以创建动态库、静态库以及 Qt Quick 扩展插件、QtCreator 自身插件
其他项目可以创建单元测试项目、Qt4 设计师自定义控件、子目录项目等
Non-Qt-Project非 Qt 项目。可以创建纯 C 或纯 C++ 项目
Import Project导入项目。从版本控制系统管理的软件项⽬导入旧的项目

常用的只有第⼀类 Application,选择它,在右侧会看到 Qt 应⽤程序的五个子模板:

  • Qt Widgets Application:普通窗体模板,传统基于部件的窗体界面程序。
  • Qt Console Application:Qt 控制台应用程序。因为 Qt 主要用于图形界面设计,这个控制台项目模板基本不用。
  • Qt for Python:在Python下用 LGPL 的许可来开发闭源 Qt 软件。
  • Qt Quick Application: Qt 提供的⼀种高级用户界面技术,使用它可以方便快速的为移动以及嵌入式设备开发流畅美观的用户界面。Qt Quick 模块是开发 QML 应用的标准库,提供了使用 QML 创建用户界⾯所需的⼀切,包括可视化、交互、动画、模型、视图、粒子效果以及着色效果等。
  1. 选择存放路径

这里需要注意的是我们选择路径的时候一定不要带中文路径,不然在运行程序的时候会出现报错。

在这里插入图片描述

  1. 选择构建工具
    在这里插入图片描述

这个是构建系统,通过Qt写的程序,涉及到一些“元编程”技术,是通过代码来生成代码。也就是说Qt框架会在编译的时候,会自动调用一些列的生成工具,基于写的代码,生成一系列的其他C++代码,最终编译的代码,也是最后生成的代码。所以这里我们使用的是qmake构建工具。

Qt 中的构建⼯具有三种可供选择,分别是:qmake、CMake、Qbs,下面依次介绍。

  • qmake: qmake 是⼀个构建⼯具(build tool),用于自动生成 makefile 文件。qmake 支持跨平台构建。qmake 编辑的是⼀个后缀名为 .pro 的文件。
  • CMake:CMake 是⼀个跨平台的构建⼯具。CMake 本⾝不是⼀个编译器,其实就是生成⼀个让编译器能读懂编译流程的文件工具。让 CMake 自动生成构建系统,例如 Makefile 和 Visual Studio 项目文件。CMake 是⼀个第第三方工具,有自己的文案。
  • Qbs:Qbs(Qt Build Suite:Qt构建套件)同 qmake、CMake ⼀样都是构建⼯具。Qbs 号称是新⼀代的构建工具,比qmake 编译速度更快。Qbs 没有绑定 Qt 版本,它从项目文件的高级项目描述中生成⼀个正确的依赖表。而传统的MakeFile 生成工具如 qmake 和 CMake ,其在⽣成 MakeFile 文件后将实际的名利交给 Make 工具去执行。
  1. 选择父类
    在这里插入图片描述

我们使用Qt Creator 创建项目,会自动的生成一些代码出来,生成出来的代码就包含一个类。此处就是用来选择自动生成的类的父类是谁。

  1. QMainWindows:完整的应用程序窗口(可以包含菜单栏,工具栏,状态栏……)
  2. QWidget:表示一个控件。(可以是输入框,下拉框,按钮,单选框,复位按钮……)
  3. QDialog:表示一个对话框

这里我们选择第二个QWidget就可以了。

还有一点就是form file的勾选
Qt创建图形化界面程序,有两种方式,一种是通过代码的方式进行编写,第二种就是通过图形化界面的方式来生成界面,此时通过图形化界面的方式就需要使用到这个form file文件。勾选了这个form file我们就可以使用Qt Designer或者直接使用Qt creator来边界 ui 文件,从而通过图形化界面的方式生图形化界面。

上面三者的之间的关系是:

在这里插入图片描述

  1. 选择对应翻译文件

这里我们暂时不关注,直接选择none即可。
在这里插入图片描述

  1. 选择基于那个编译器的Qt SDK来构建后序代码

因为当时我们只是选择以其中的一个下载,如果勾选了其他的选项的话,这里就需要进行选择

在这里插入图片描述

  1. 项目管理器

如果我们想要把我们的代码提交的git,githu,gitee上的话,就可以选择。

在这里插入图片描述
此时我们就创建好了一个项目。

2. 项目代码解析

我们创建好一个项目后,Qt会自动给我们生成一些代码。

在这里插入图片描述

2.1 main.cpp

int main(int argc, char *argv[]) // 命令行参数
{
    QApplication a(argc, argv); // 编写一个Qt的图形化界面程序,一定需要QApplication对象
    Widget w; // 这个就是我们刚开始选择的父类名称,而这个Widget的父类就是QWidget
    w.show(); // 这个就是用来显示窗口用到,我们刚创建出来的项目是可以直接进行执行的,只会出现一个窗口,而这个窗口就是这个函数显示出来的。
    return a.exec(); // exec就是执行让代码跑起来
}

2.2 widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget> // 包含对应的头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } 
QT_END_NAMESPACE

class Widget : public QWidget // 从这里我们就可以看到Widget是继承了QWidget,而QWidget是Qt内置的类,Qt的设定就是Qt内置的类和包含头文件的名字是一样的,这样也是方便记忆。
{
    Q_OBJECT // 这是一个Qt内置的宏,展开后就是一大堆的代码,而这个也是后期非常核心的机制,就是“信号”和“槽”,如果某个想使用“信号和槽”的话就需要引入这个宏
	// 可以通过crtl+鼠标左键进入文档查看细节。
public:
    Widget(QWidget *parent = nullptr); // Qt种引入了“对象树”机制(后期会讲解到),创建Qt对象,就可以将对象挂到对象树上,往对象树上挂的时候就需要指定“父节点”,此处的树就是一个N叉树
    ~Widget();

private:
    Ui::Widget *ui; // 这个就是和form file密切相关的。
};
#endif // WIDGET_H

2.3 widget.cpp

#include "widget.h" // 创建生成时的文件
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this); // 将form file生成的界面和我们当前的widget进行关联起来
}

Widget::~Widget()
{
    delete ui;
}
  1. widget.ui

如果我们直接进行双击点击的话,我们将会得到一个图形化界面。这个时候Qt Creator就会调用Qt Designer界面设计界面

在这里插入图片描述

以下这种格式叫做XML,和HTML一样都是使用标签来表示数据。xml文件就是用来描述程序界面的模样,进一步的qmake会调用相关工具,依据这个xml进一步生成C++代码,从而把完整的的界面代码构造出来。

在这里插入图片描述

2.4 .pro工程文件

.pro是Qt项目的工程文件,也是qmake工具构建时候的重要依据。.pro其实和linux种学过的Makefile文件很像,qmake和.pro搭配的作用就和Makefile是类似的。

QT       += core gui  // 要引入的Qt模板,按需要进添加

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

3. 中间文件

以上的.h .cpp .ui .pro都是一些源文件,但是如果编译运行Qt项目后,构建构成中还会生成一些中间文件。

在这里插入图片描述
在这里插入图片描述
这里Qt还会创建一个目录,这个目录下生成的是一些临时文件。

在这里插入图片描述

在这里插入图片描述
而这里的ui_widget.h就是我们编译运行成功后Qt给我我们生成的代码。而这个代码就会在widget.cpp种的setupUi中生成界面的具体细节。

标签:widget,Qt,项目,代码,Widget,qmake,生成,&&
From: https://blog.csdn.net/qq_74276498/article/details/142534947

相关文章

  • 【Qt】编写第一个Qt程序 && 对象树 && 内存泄漏问题探讨
    编写第一个Qt程序1.使用图形化界面生成2.使用代码生成3.对象树3.1什么是对象树3.2验证对象树4.解决编码问题1.使用图形化界面生成创建好一个项目后,我们可以点击widget.ui进入图形化界面设计,可以直接通过拖拽的方式进行添加。通过拖拽的方式进行设计此......
  • 旅游项目管理软件10软件,助力行业数字化转型
    市面上主流的10款旅游项目管理系统推荐:PingCode、Worktile、Trello、Asana、Basecamp、Monday.com、Smartsheet、Wrike、旅管家、Travelog。在旅游行业中,项目管理的复杂性常常让人感到不知所措,特别是面对多方协调、行程安排和预算控制时。这些挑战不仅影响团队效率,还可能导致......
  • AB plc设备数据 转profinet IO项目案例
    目录1 案例说明 12 VFBOX网关工作原理 13 准备工作 24 网关采集ABPLC数据 25 用PROFINETIO协议转发数据 46 案例总结 71 案例说明设置网关采集ABPLC数据把采集的数据转成profinetIO协议转发给其他系统。2 VFBOX网关工作原理VFBOX网关是协议转换网关,是把一种协议......
  • 【项目综合】高并发内存池
    目录一、项目背景1)mini版的tcmalloc2)内存池是什么3)C/C++的malloc和new4)所用技术栈和项目环境二、实现定长内存池1)基本框架2)申请内存块3)释放内存块4)细节优化和性能测试 三、高并发内存池的整体框架四、实现threadcache申请内存1)基本框架2)哈希桶中的映射......
  • 一站式解决方案:10款PM工程项目管理软件深度解析
    市面上主流的10款PM工程项目管理系统推荐:PingCode、Worktile、飞书、金和项目管理、致远协同办公、Asana、Trello、JIRA、Basecamp、Monday.com。在现代企业管理中,项目的复杂性常常让人感到无从应对,错失进度和预算控制的情况屡见不鲜。选择合适的PM工程项目管理系统,不仅可以......
  • Qt源码编译-Ubuntu平台
    Qt源码编译-Ubuntu平台Qt官网已取消了Qt5.15版本二进制安装包。如果要安装Qt5.15需要下载源码自行编译安装或使用商业授权版本。Qt是一个功能强大的跨平台开发框架,支持从嵌入式系统到桌面应用程序的开发。如果你希望在Ubuntu平台上从源码编译Qt,这篇教程将带你一步步......
  • Qt面试题
    什么是Qt的元对象系统?点击查看代码Qt的元对象系统是Qt框架中一个核心的组成部分,提供了一种机制来拓展C++的功能,Qt的元对象系统(Meta-ObiectSystem)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。元对象系统由以下三个基础组成。1.QObiect类是所有......
  • [Angular] 从零开始使用 Angular CLI 创建 Angular 项目
    一、安装Node.js......
  • PyQt5 使用 QFrame 实现页面类抽屉式的进入与退出的动画
    PyQt5使用QFrame实现页面类抽屉式的进入与退出的动画当多个页面切换,但是又不想每个页面里的内容只是简单的出现与消失,则可以使用这个QPropertyAnimation动画代码结构本文中全部代码全在test_QFrame_Animation.py这一个文件中编码,步骤中有变动的地方会注释标注,无改动的不会重......
  • 结对项目--四则运算
    结对项目--四则运算这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标四则运算成员3122004564方伟城psp表格PSP2.1Personal......