C++QT教程2——创建QT项目

news2024/11/14 12:16:34

文章目录

  • 2 创建Qt项目
    • 2.1 使用向导创建
    • 2.2 手动创建
    • 2.3 .pro文件
    • 2.4 一个最简单的Qt应用程序
      • main入口函数中(main.cpp)
      • arnold_widget.h函数
      • arnold_widget.cpp
    • 参考文章

2 创建Qt项目

2.1 使用向导创建

打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项
在这里插入图片描述
弹出New Project对话框,选择Qt Widgets Application,
在这里插入图片描述
选择【Choose】按钮,弹出如下对话框

在这里插入图片描述
设置项目名称和路径,按照向导进行下一步,
在这里插入图片描述
选择编译套件
在这里插入图片描述
向导会默认添加一个继承自CMainWindow的类,可以在此修改类的名字和基类。默认的基类有QMainWindow、QWidget以及QDialog三个,我们可以选择QWidget(类似于空窗口),这里我们可以先创建一个不带UI的界面,继续下一步

(QMainWindow和QDialog是QWidget的派生类)

在这里插入图片描述

在这里插入图片描述
系统会默认给我们添加main.cpp、mywidget.cpp、 mywidget.h和一个.pro项目文件,点击完成,即可创建出一个Qt桌面程序。

我的:
在这里插入图片描述
(注意这里要选qmake,不然可能会出点问题,比如少头文件源文件啥的,不自动生成)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(.pro是工程文件,相当于VS的.sln)
在这里插入图片描述

2.2 手动创建

添加一个空项目

在这里插入图片描述
选择【choose】进行下一步。设置项目名称和路径 —> 选择编译套件 --> 修改类信息 --> 完成(步骤同上),生成一个空项目。在空项目中添加文件:在项目名称上单击鼠标右键弹出右键菜单,选择【添加新文件】

在这里插入图片描述
弹出新建文件对话框
在这里插入图片描述
在此对话框中选择要添加的类或者文件,根据向导完成文件的添加。

2.3 .pro文件

在使用Qt向导生成的应用程序.pro文件格式如下:

QT       += core gui  //包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于Qt4版本 才包含widget模块
TARGET = QtFirst  //应用程序名  生成的.exe程序名称
TEMPLATE = app    //模板类型    应用程序模板  application
SOURCES += main.cpp\   //源文件
        mywidget.cpp
HEADERS  += mywidget.h   //头文件

我新建项目的.pro长这样:

# Qt包含的模块:qt core、qt gui
QT       += core gui

# 大于Qt4版本 才包含widget模块
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.

#(如果使用任何标记为不推荐的Qt功能,以下定义将使编译器发出警告(确切的警告取决于编译器)。
#请参阅不推荐使用的API的文档,以了解如何将代码移植到它之外。)
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.

#(如果代码使用了不推荐使用的API,还可能导致代码无法编译。
#为此,请取消对以下行的注释。
#您还可以选择仅在Qt的某个版本中禁用不推荐的API。)

#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    arnold_widget.cpp

HEADERS += \
    arnold_widget.h

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

.pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。.pro文件的写法如下:

  • 注释
    从“#”开始,到这一行结束。
  • 模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE = app
  • app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
  • lib - 建立一个库的makefile。
  • vcapp - 建立一个应用程序的VisualStudio项目文件。
  • vclib - 建立一个库的VisualStudio项目文件。
  • subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
  • #指定生成的应用程序名:
    TARGET = QtDemo
  • #工程中包含的头文件
    HEADERS += include/painter.h
  • #工程中包含的.ui设计文件
    FORMS += forms/painter.ui
  • #工程中包含的源文件
    SOURCES += sources/main.cpp sources
  • #工程中包含的资源文件
    RESOURCES += qrc/painter.qrc
  • greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    这条语句的含义是,如果QT_MAJOR_VERSION大于4(也就是当前使用的Qt5及更高版本)需要增加widgets模块。如果项目仅需支持Qt5,也可以直接添加“QT += widgets”一句。不过为了保持代码兼容,最好还是按照QtCreator生成的语句编写。
  • #配置信息
    CONFIG用来告诉qmake关于应用程序的配置信息。
    CONFIG += c++11 //使用c++11的特性
    在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项更安全。

2.4 一个最简单的Qt应用程序

在这里插入图片描述

main入口函数中(main.cpp)

#include "arnold_widget.h"

#include <QApplication> //包含一个应用程序的类的头文件

//main程序入口,argc命令行变量的数量,argv命令行变量的数组
int main(int argc, char *argv[])
{
    //a应用程序对象,有且只有一个
    QApplication a(argc, argv);
    //窗口对象,父类是QWidget
    Arnold_Widget w;
    //窗口对象默认不会显示,必须调用show方法显示窗口
    w.show();
    //a.exec();让应用程序对象进入消息循环
    //让代码阻塞到这行,直到点击了窗口右上角叉叉,退出程序
    return a.exec();
}

解释:

  • Qt系统提供的标准类名声明头文件没有.h后缀

  • Qt一个类对应一个头文件,类名就是头文件名

  • QApplication应用程序类

  • 管理图形用户界面应用程序的控制流和主要设置。是Qt的整个后台管理的命脉,它包含主事件循环,在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。

  • 对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。

  • a.exec()
    程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。

arnold_widget.h函数

#ifndef ARNOLD_WIDGET_H
#define ARNOLD_WIDGET_H

#include <QWidget>  //包含头文件,QWidget窗口类

class Arnold_Widget : public QWidget    //此类继承自QWidget类
{
    Q_OBJECT    //Q_OBJECT宏,允许类中使用信号和槽的机制

public:
    Arnold_Widget(QWidget *parent = nullptr);   //有参构造,默认值是空指针
    ~Arnold_Widget();   //析构函数
};
#endif // ARNOLD_WIDGET_H

arnold_widget.cpp

#include "arnold_widget.h"

Arnold_Widget::Arnold_Widget(QWidget *parent)
    : QWidget(parent)   
//两种说法:①初始化列表,写在子类构造函数后面给父类构造函数初始化②指定父类的构造函数初始化的值继承给子类
{
}

Arnold_Widget::~Arnold_Widget(){}


【锚点】
https://www.bilibili.com/video/BV1g4411H78N?p=5&spm_id_from=pageDriver

参考文章

参考文章:QT从入门到实战完整版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/840945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTF Crypto --- 七八月份比赛杂题记录

文章目录 前言第一届交通运输行业网络安全大赛决赛---CryptoeasyRSAMypow baby_RSAEasyRSA你懂RSA吗 前言 哥们终于想起账号密码了(尊嘟忘了)。 鸽了快两个星期辣&#xff0c;下次一定不鸽(x)。 第一届交通运输行业网络安全大赛决赛—Crypto easyRSA 题目&#xff1a; f…

APP外包开发的开发语言对比

在开发iOS APP时有两种语言可以选择&#xff0c;Swift&#xff08;Swift Programming Language&#xff09;和 Objective-C&#xff08;Objective-C Programming Language&#xff09;&#xff0c;它们是两种不同的编程语言&#xff0c;都被用于iOS和macOS等苹果平台的软件开发…

Kafka入门,保姆级教学

文章目录 Kafka概念消息中间件对比消息中间件对比-选择建议Kafka常用名词介绍Kafka入门1. Kafka安装配置2.Kafka生产者与消费者关系3.Kafka依赖4.生产者发消息5.消费者接受消息6.Kafka高可用性设计6.1集群Kafka备份机制(Reolication) 7.kafka生产者详解7.1 发送类型7.2参数详解…

五分钟帮您理解Linux网络核心知识点——socket和epoll

关于linux网络相关的基础知识点&#xff0c;最热的两个就是socket和epoll&#xff0c;接下来我就用最简单的方式把他俩说清楚便于大家理解&#xff01; Socket Socket 是一种进程间通信的方法&#xff0c;它允许位于同一主机&#xff08;计算机&#xff09;或使用网络连接起来…

【链表OJ 3】链表的中间结点

前言: 本文收录于http://t.csdn.cn/n6UEP数据结构刷题的博客中,首先欢迎大家的来访&#xff0c;其次如有错误&#xff0c;非常欢迎大家的指正&#xff01;我会及时更正错误&#xff01; 目录 一.链表的中间结点 1.1原理:快慢指针的使用 链表元素个数为奇数时 链表元素个数…

只会用插件可不行,这些前端动画技术同样值得收藏-JavaScript篇(下)

目录 前言 介绍 基本使用 关键帧 KeyframeEffect的三种类的声明 keyframes options 动画对象 全局Animation类 标签中的animate函数 总结 相关代码&#xff1a; 前言 接着上文往下介绍&#xff0c;上篇文章我们对JS原生动画和贝塞尔曲线有了一个详细的认识&#x…

了解IL汇编异常处理语法

从网上拷过来一个IL汇编程序&#xff0c;编译时先报如下错&#xff0c; 看它是把空格识别为了下注红线的字符&#xff0c;这是字符编码的问题&#xff0c;用记事本替换功能替换了&#xff1b; 然后又报如下的错&#xff0c; 看不出来问题&#xff0c;拷一句正确的来&#xff0…

Netty面试题3

讲一讲你在网络通讯中遇到的坑或者比较棘手的问题 1、网络延迟问题 2、网络拥塞问题 某公司的Java项目需要向远程服务器发送大量的HTTP请求并获取响应&#xff0c;由于请求量较大&#xff0c;导致网络拥塞&#xff0c;请求响应延迟较高。针对这个问题&#xff0c;我们可以采取…

「2024」预备研究生mem-等差等比数列片段和 一般数列

一、等差数列 片段和 二、等比数列 片段和 三、一般数列

数据结构 | 树的定义及实现

目录 一、树的术语及定义 二、树的实现 2.1 列表之列表 2.2 节点与引用 一、树的术语及定义 节点&#xff1a; 节点是树的基础部分。它可以有自己的名字&#xff0c;我们称作“键”。节点也可以带有附加信息&#xff0c;我们称作“有效载荷”。有效载荷信息对于很多树算法…

AcWing 379. 捉迷藏(最小路径点覆盖匈牙利算法)

输入样例&#xff1a; 7 5 1 2 3 2 2 4 4 5 4 6输出样例&#xff1a; 3 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N220; int n,m,t; int d[N][N],vis[N]; int match[N]; bool find(int x){for(int i1;i<n;i){if(d[x][i]&&…

Mac unsupported architecture

&#xff08;瓜是长大在营养肥料里的最甜&#xff0c;天才是长在恶性土壤中的最好。——培根&#xff09; unsupported architecture 在mac的m系列芯片中容易出现此类问题&#xff0c;因为m系列是arm64的芯片架构&#xff0c;而有些nodejs版本或npm包的芯片架构是x86的&#x…

Visual Studio配置PCL库

Visual Studio配置PCL库 Debug和Release配置新建项目配置属性表测试参考 Debug和Release Debug和Release的配置过程一模一样&#xff0c;唯一区别就在于最后一步插入的附加依赖项不同&#xff0c;因此下面以debug为例。 配置新建项目 1、新建一个C空项目&#xff0c;模式设置…

Linux ——实操篇

Linux ——实操篇 前言vi 和 vim 的基本介绍vi和vim常用的三种模式正常模式插入模式命令行模式 vi和vim基本使用各种模式的相互切换vi和vim快捷键关机&重启命令基本介绍注意细节 用户登录和注销基本介绍使用细节 用户管理基本介绍添加用户基本语法应用案例细节说明 指定/修…

ROS实现机器人移动

开源项目 使用是github上六合机器人工坊的项目。 https://github.com/6-robot/wpr_simulation.git 机器人运动模型 运动模型如下所示&#xff1a;&#x1f447; 机器人运动的消息包&#xff1a; 实现思路&#xff1a;&#x1f447;   为什么要使用/cmd_vel话题。因为这…

Spring Cloud +UniApp 智慧工地云平台源码,智能监控和AI分析系统,危大工程管理、视频监控管理、项目人员管理、绿色施工管理

一套智慧工地云平台源码&#xff0c;PC管理端APP端平板端可视化数据大屏端源码 智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术&#xff0c;通过工地中台、三维建模服务、视频AI分析服务等技术支撑&#xff0c;实现智慧工地高精度动态仿…

项目实战 — 消息队列(4){消息持久化}

目录 一、消息存储格式设计 &#x1f345; 1、queue_data.txt&#xff1a;保存消息的内容 &#x1f345; 2、queue_stat.txt&#xff1a;保存消息的统计信息 二、消息序列化 三、自定义异常类 四、创建MessageFileManger类 &#x1f345; 1、约定消息文件所在的目录和文件名…

重锤式表面电阻测试仪的原理和特点

重锤式表面电阻测试仪是一种用于测量材料表面电阻的仪器。它采用了重锤敲击和测量电流的方式进行测试。 工作原理&#xff1a; 重锤式表面电阻测试仪通过将一个金属锤头敲击在待测物体表面&#xff0c;产生一个封闭电路。测量仪器通过检测在敲击区域上下电极之间距离的电流流…

C语言代码的x86-64汇编指令分析过程记录

先通过Xcode创建一个terminal APP&#xff0c;语言选择C。代码如下&#xff1a; #include <stdio.h>int main(int argc, const char * argv[]) {int a[7]{1,2,3,4,5,6,7};int *ptr (int*)(&a1);printf("%d\n",*(ptr));return 0; } 在return 0处打上断点&…

相机传感器格式与镜头光圈参数

相机靶面大小 CCD/CMOS图像传感器尺寸&#xff08;sensor format&#xff09;1/2’‘、1/3’‘、1/4’实际是多大 1英寸——靶面尺寸为宽12.7mm*高9.6mm&#xff0c;对角线16mm。 2/3英寸——靶面尺寸为宽8.8mm*高6.6mm&#xff0c;对角线11mm。 1/2英寸——靶面尺寸为宽6.…