Qt pro文件详解

2023-05-16

文章目录

    • pro文件中的配置信息
    • QT配置项

已剪辑自: http://c.biancheng.net/view/vip_9661.html

默认情况下,每个 Qt 项目都包含一个后缀名为.pro、名称和项目名相同的文件,我们通常称它为项目管理文件或者工程管理文件(简称 pro 文件)。

例如,新建一个 Qt 项目,如下图所示:

img
图 1 项目结构

该项目的项目名为 Demo,项目中共包含 4 个文件,其中 Demo.pro 就是项目管理文件。

任何一个 Qt 项目都至少包含一个 pro 文件,此文件负责存储与当前项目有关的配置信息,比如:

  • 项目中用到了哪些模块?
  • 项目中包含哪些源文件,哪些头文件,它们的存储路径是什么?
  • 项目使用哪个图片作为应用程序的图标?
  • 项目最终生成的可执行文件的名称是什么?

所谓模块,可以简单地理解为文件夹或者压缩包,内部包含多个功能相近的类。作为一款成熟的 GUI 框架,Qt 提供了大量的类,根据这些类的功能,Qt 将它们分成了几个组,每个组称为一个模块。打开 Qt Creator 的帮助界面并搜索“All modules”,可以看到 Qt 的所有模块。

一个项目中可能包含上百个源文件,Qt 编译这些源文件的方法是:先由 qmake 工具根据 pro 文件记录的配置信息生成相应的 makefile 文件,然后执行 make 命令完成对整个项目的编译。也就是说,pro 文件存储的配置信息是用来告知编译器如何编译当前项目的,所以一个 Qt 项目要想完美运行,既要保证各个源文件中程序的正确性,还要保证 pro 文件中配置信息的合理性。

对于一个刚刚创建好的 Qt 项目,pro 文件并不是空的,而是包含一些基本的配置信息。实际开发中,Qt 会自动修改 pro 文件的内容,但有时也需要我们手动修改,例如程序中用到某个第三方库时,就需要我们手动修改 pro 文件。

接下来,我们就为大家详细地讲解 pro 文件中各个配置信息的含义,以及如何手动修改 pro 文件。

pro文件中的配置信息

在图 1 所示的 Demo 项目中,双击打开 Demo.pro 项目管理文件,会看到如下内容:

#-------------------------------------------------
#
# Project created by QtCreator 2021-08-31T16:05:04
#
#-------------------------------------------------

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Demo
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as 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 you use 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
mainwindow.cpp

HEADERS +=
mainwindow.h

以上是 Demo.pro 配置文件中默认包含的内容。其中,#号是注释符号,除了以#号开头的注释内容外,其它内容都是当前项目的配置信息,比如QT += core guiTARGET = Demo等。

pro 文件可以存储上百条配置信息,每条配置信息由三部分构成:

  1. 前半部分是关键字,也称配置项,用来指明配置信息的含义;
  2. 中间用 +=、-=、= 等数学符号连接配置项和它对应的值;
  3. 后半部分是配置项对应的值,一个配置项可以对应多个值,每个值代表不同的含义。

例如在 QT += core gui中,Qt是配置项,coregui是该配置项的值,中间用+=符号连接。下表给大家罗列了一些常用的配置项以及它们各自的含义。

表 1 Qt pro文件常用配置项 配置项 含 义

QT指定项目中用到的所有模块,默认值为 core 和 gui,中间用 += 符号连接。
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets如果 QT 版本大于 4(Qt5 或更高版本),则需要添加 widgets 模块,该模块包含所有控件类。
TARGET指定程序成功运行后生成的可执行文件的名称,中间用 = 符号连接。
TEMPLATE指定如何运行当前程序,默认值为 app,表示当前程序是一个应用程序,可以直接编译、运行。常用的值还有 lib,表示将当前程序编译成库文件。
DEFINES在程序中新定义一个指定的宏,比如 DEFINES += xxx,如同在程序中添加了 #define xxx 语句。
SOURCES指定项目中包含的所有 .cpp 源文件。
HEADERS指定项目中包含的所有 .h 头文件。
FORMS指定项目中包含的 ui 文件。
INCLUDEPATH指定头文件的存储路径,例如:INCLUDEPATH += /opt/ros/include
CONFIG经常对应的值有:release:以 release 模式编译程序;debug:以 debug 模式编译程序;warn_on:编译器输出尽可能多的警告;c++11:启动 C++11 标准支持。例如 CONFIG += c++11。

根据上表中对各个配置项的讲解,您可以很轻松地搞清楚 Demo.pro 文件中各个配置项的含义,这里不再过多赘述。

上表中,大部分配置项不需要我们手动修改,比如 SOURCES、HEADERS、FORMS 等,当我们添加或者删除项目中的源文件时,Qt 会自动修改这些配置项。有些配置项需要手动修改,比如 QT 配置项,接下来重点给大家讲解 QT 的用法。

QT配置项

前面提到,Qt 根据各个类的功能将它们分到不同的模块,因此程序中要想使用某个类,必须完成两项准备工作:

  1. 引入包含该类的头文件,通常情况下,Qt 中每个类的类名和包含它的头文件的名称是相同的,比如 QWiget 窗口类位于<QWidget>头文件中;
  2. 将该类所属的模块添加到 pro 项目管理文件中。

QT 用来指明当前项目中用到的所有模块,它的默认值是 core 和 gui,分别表示引入 Core 模块和 GUI 模块:

  • Core 模块包含了 Qt GUI 界面开发的核心功能,其它所有模块都需要依赖于这个模块,它是所有 Qt GUI 项目必备的模块;
  • GUI 模块提供了用于开发 GUI 应用程序的必要的一些类。

每个新创建的 Qt GUI 项目中,都默认包含 Core 模块和 GUI 模块,如果项目中用不到它们,可以使用QT -=删除。例如,删除项目中包含的 GUI 模块,只需在 pro 文件中添加一条配置信息:

QT -= gui

除了 Core 和 GUI 模块外,Qt 还有 SQL(包含操作数据库相关的类)、Widgets(包含构建界面的所有控件类)、Multimedia(包含提供音频、视频等功能的类)等模块,Qt 项目不会自动包含这些模块。例如,项目中用到 SQL 模块中的一些类时,需要在 pro 文件中添加如下配置信息:

QT += sql

那么,当程序中用到某个类时,如何知道它属于哪个模块呢?很简单,先将该类所在的头文件中引入到程序中,然后鼠标选中头文件并按Fn+F1组合键,打开该头文件的使用手册后就可以看到它所属的模块。以程序中使用 QWidget 窗口类为例,先在程序中添加如下语句:

#include <QWidget> 

紧接着,鼠标选中“QWidget”并按Fn+F1组合键,打开下图所示的 QWdiget 类使用手册,可以看到该类所属的模块为 widgets。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ytuWkqmQ-1669281570032)(http://c.biancheng.net/uploads/allimg/211028/1A9112O8-1.gif)]
图 2 查看类所属的模块

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt pro文件详解 的相关文章

  • macbook pro 识别不到外接显示器

    背景 最近在公司和家都用到外接显示器 回到家后合上mac 外接也跟着没信号了 重启后直接不识别了 机型macbookpro15 2018 系统版本10 15 4 1 确保 线材 外接显示器都没有问题 找其他电脑测试 2 不勾选 再次登录时重
  • Ubuntu 22.04下载安装VMware Workstation Pro 17

    Ubuntu 22 04下载安装VMware Workstation Pro 17 一 下载 打开浏览器 xff0c 访问VMware的官方网站 xff1a https www vmware com 页面打开后 xff0c 点击菜单中的 A
  • 小米pro15拆机_小米pro拆机图解(8步)

    小米pro2年前买的 从一开始的血妈亏到用到后面的越来越香的用户体验 当然 也是有个槽点的 就是风扇的问题啦 昨天工具到了 在朋友的协助下踩坑清灰成功完特水一篇文章来过一遍 写在前面 a 机型 MI pro i5版 b 用到的工具 c 最好
  • Qt笔记-pro文件中添加-fpermissive

    老项目里面的库 xff0c 一包含就报 fpermissive错误 在Makefile里面写比较方便 在Qt的pro里面要这也 xff1a QMAKE CXXFLAGS 43 61 fpermissive 我在Linux上成功了 如果不行可
  • VMware 17 Pro安装(升级)

    文章目录 前言一 下载安装1 下载地址2 安装流程 前言 本文演示如何在windowns 10下 安装 xff08 升级 xff09 VMware 17 Pro 一 下载安装 1 下载地址 VMware 17 Pro 2 安装流程 如下图所
  • 零刻 SEi12 Pro,ALL IN ONE搭建教程

    一台mini的NUC能做什么 xff1f 当然每个人的心里都会有着不同的答案 xff0c 既然是一台Mini主机那就肯定少不了部署一个All In One来榨干他的性能 今天我就大家带来一个部署All In One的详细教程 xff0c 希
  • mamp pro apache 中文目录浏览乱码

    解决办法 xff1a 打开mamp pro apache配置文件httpd conf xff0c 在任意一行后加入 xff1a span class hljs attribute IndexOptions Charset span 61 s
  • linux远程桌面没有声音,远程桌面到 Windows 10 Pro 上的远程麦克风问题

    想从常用笔记本里远程桌面到另一台电脑上的 Windows 10 Pro 进行测试 遇到一些坑 xff0c 最大的问题比如客户端 DPI 高而导致远程桌面显示的字太小 xff0c 无法将本地的麦克风作为远程桌面上应用程序的声音输入 xff0c
  • 虚拟机安装教程 VMware Workstation 16 Pro

    VMware虚拟机能干什么 xff1f 它可以使你在一台机器上同时运行两个及以上的Windows LINUX系统 系统切换真正的秒切 xff01 你可以用虚拟机来进行各种测试或实验而不会影响到你的物理实体机 xff0c 极其方便 xff0c
  • CMakeList.txt文件详解

    1 整体结构 CMakeList txt文件必须遵循以下的格式 xff1a 所需的CMake版本 xff08 cmake minimum required xff09 软件包的名称 xff08 project xff09 查找构建所需要的其
  • mac pro M1(ARM)安装vmware虚拟机及centos8详细教程

    前言 mac发布了m1芯片 xff0c 其强悍的性能收到很多开发者的追捧 xff0c 但是也因为其架构的更换 xff0c 导致很多软件或环境的安装成了问题 xff0c 这次我们接着来看如何在mac m1环境下安装centos8 Centos
  • Qt工程pro文件配置详解

    文章目录 1 pro文件常用配置1 1 注释1 2 CONFIG1 3 DEFINES1 4 FORMS1 5 HEADERS1 6 INCLUDEPATH1 7 LIBS1 8 QT1 9 SOURCES1 10 TRANSLATIONS
  • Adobe Premiere Pro 2023 SP(未完成)

    需要添加
  • MacBook Pro休眠掉电、耗电量大问题解决方案

    1 前言 最近我的2015mbpMacBook Pro Retina 13 inch early 2015 更新完10 14系统后 xff0c 发现休眠待机一晚上后能掉5 电 xff0c 白天待机4 5小时又掉了8 然而在此之前我记得休眠是
  • 深度相机使用对比:Gemini Pro与RealSense D435i

    文章目录 前言一 参数对比二 环境配置三 实际使用效果图像读取视觉slam效果对比 总结 前言 为了开展视觉slam相关项目 xff0c 最近找了几款不同的深度相机进行测试 xff0c 本次主要讲一下奥比中光的Gemini Pro相机与In
  • TOF相机 Realsense L515 与 Ipad pro Lidar Camera 对比

    最近好奇都是TOF 相机 L5151 和 Ipad pro 上带的深度相机模块有啥不一样 网上很少有相关的中文资料来介绍 原理上的差异 简单搜索了一下 在此小小总结 Apple Lidar Camera 苹果采用的激光是 VCSEL Ver
  • 【ROS】launch文件详解

    参考 xff1a https www cnblogs com fuzhuoxin p 12588402 html 在节点少 xff0c 程序小的情况下可以一个一个节点来启动 xff0c 测试运行效果 xff1b 但是当工程规模大 xff0c
  • .LDS 文件详解

    最近在研究uboot xff0c 红色部分为我加上的注解 转载地址 xff1a http blog chinaunix net space php uid 61 23373524 amp do 61 blog amp cuid 61 232
  • 【BIM+GIS】Revit在ArcGIS Pro中的组织方式详解

    ArcGIS Pro 中的 Revit 文件是组织成工作空间 数据集和要素类 因此它们只是类似于地理数据库或 shapefile 的数据源 而且是只读数据源 一 受支持的 Revit 几何 Revit 文件 RVT 包含根据对象分组 称为类
  • web.xml文件详解

    前言 一般的web工程中都会用到web xml web xml主要用来配置 可以方便的开发web工程 web xml主要用来配置Filter Listener Servlet等 但是要说明的是web xml并不是必须的 一个web工程可以没

随机推荐

  • 多普勒失真信号重采样的Matlab仿真分析

    多普勒失真信号重采样的Matlab仿真分析 应用场景 水声通信指的是使用声信号在水中传输数据 相对而言 xff0c 电磁信号在水中吸收严重衰减过快 xff0c 光信号受水中悬浮颗粒的影响 xff0c 也无法完成远距离传输 这两种信号的传播距
  • 嵌入式为何钟爱SourceInsight,主要因为这个功能~

    已剪辑自 https mp weixin qq com s F gafwbZswpnY8EaCz8HxQ 不管是玩单片机还是嵌入式linux xff0c 只要是与硬件结合比较紧密的部分目前基本上还是C语言 xff0c 当然了 xff0c 不
  • 华科师兄最近的六条感悟

    已剪辑自 https mp weixin qq com s P6vz2zDTnCNli0GdyKX98Q 孤独之前是迷茫 孤独之后便是成长 曾经我是一个无法承受孤独的人 xff0c 无法和自己独处 xff0c 喜欢喧嚣的感觉 慢慢我发现这种
  • 一个优秀的程序员应该养成哪些好的习惯?

    文章目录 一 写代码前先想好思路 xff0c 先规划框架 xff0c 再到局部实现二 注重代码风格三 注重代码执行效率四 掌握一些编码原则五 解决问题时 xff0c 对于原理性的问题 xff0c 不要面向搜索引擎编程 六 注重基础知识的学习
  • 嵌入式开发中的防御性C语言编程

    嵌入式产品的可靠性自然与硬件密不可分 xff0c 但在硬件确定 并且没有第三方测试的前提下 xff0c 使用防御性编程思想写出的代码 xff0c 往往具有更高的稳定性 防御性编程首先需要认清C语言的种种缺陷和陷阱 xff0c C语言对于运行
  • PPT 最后一页写什么结束语既得体又能瞬间提升格调?

    谢邀 xff01 我只分享一个现下最流行的方法 xff0c 绝对让尾页逼格满满 xff01 罗永浩雷军都在用的 金句法 提到这份方法 xff0c 你可能会觉得很陌生 xff0c 但你一定见过这样的页面 xff1a 这样的页面还有很多 xff
  • Qt控件和事件

    文章目录 什么是 Qt 控件什么是Qt事件总结 已剪辑自 http c biancheng net view vip 9651 html Qt 是一个著名的 GUI 框架 xff0c 用来开发和用户交互的图形界面 作为 GUI 框架 xff
  • Qt信号和槽机制详解

    文章目录 信号和槽connect 函数实现信号和槽实例演示信号和槽机制 已剪辑自 http c biancheng net view vip 9652 html 信号和槽是 Qt 特有的消息传输机制 xff0c 它能将相互独立的控件关联起来
  • Qt QLabel文本框的使用

    文章目录 QLabel文本框的使用QLabel文本框的信号和槽实例演示QLabel文本框的用法 已剪辑自 http c biancheng net view vip 9653 html QLabel 是 Qt 帮我们写好的一个控件类 xff
  • Qt QPushButton按钮用法详解

    文章目录 QPushButton按钮的创建QPushButton按钮的使用QPushButton按钮的信号和槽实例演示QPushButton按钮用法 已剪辑自 http c biancheng net view vip 9654 html
  • Qt QLineEdit单行输入框用法详解

    已剪辑自 http c biancheng net view vip 9655 html QLineEdit 是 Qt 提供的一个控件类 xff0c 它直接继承自 QWdiget 类 xff0c 专门用来创建单行输入框 xff0c 如下图所
  • 使用python开发json、csv数据格式转换工具

    使用python开发json csv数据格式转换工具 json和xml是业界常用的数据格式 xff0c 而游戏行业经常使用csv配表 xff0c 包括本地化文本和数值 本文介绍csv和json序列化 逆序列化相关的python库 xff0c
  • 【学习QT必备的C++基础】C++类和对象

    文章目录 C 43 43 类的定义和对象的创建详解类的定义创建对象访问类的成员使用对象 指针 http c biancheng net c 80 总结 C 43 43 类的成员变量和成员函数详解在类体中和类体外定义成员函数的区别 C 43
  • 【学习QT必备的C++基础】C++引用精讲,C++ &用法全面剖析

    文章目录 C 43 43 引用10分钟入门教程C 43 43 引用作为函数参数C 43 43 引用作为函数返回值 C 43 43 引用在本质上是什么 xff0c 它和指针到底有什么区别 xff1f 引用和指针的其他区别 C 43 43 引用
  • 【学习QT必备的C++基础】C++继承、派生与多态

    文章目录 C 43 43 继承和派生简明教程C 43 43 三种继承方式public protected private 修饰类的成员public protected private 指定继承方式改变访问权限 C 43 43 继承时的名字遮
  • QT中组件/控件类的关系

    一 常见类继承关系 二 窗口类继承关系 Qt中窗口类的继承关系 说明 xff1a QWidge继承自QObject和QPaintDevice类 QObject是支持QT对象模型的基类 Qt Object Model QPaintDevice
  • Qt QListWidget列表框用法详解

    文章目录 QListWidget列表框的创建QListWidgetItem列表项 QListWidget列表框的使用QListWidget列表框的信号和槽实例演示QListWidget列表框的用法 已剪辑自 http c biancheng
  • Qt QTreeWidget树形控件用法详解

    文章目录 QTreeWidget控件的创建QTreeWidget QTreeView的关系和区别QTreeWidgetItem类 QTreeWidget的实际应用1 添加结点2 给结点添加图标3 给结点添加复选框4 多列树形控件5 QTre
  • Qt QMessageBox用法详解

    文章目录 通用的QMessageBox消息框1 information消息对话框2 critical消息对话框3 question消息对话框4 warning消息对话框5 about和aboutQt对话框 自定义QMessageBox对话框
  • Qt pro文件详解

    文章目录 pro文件中的配置信息QT配置项 已剪辑自 http c biancheng net view vip 9661 html 默认情况下 xff0c 每个 Qt 项目都包含一个后缀名为 pro 名称和项目名相同的文件 xff0c 我