笔记--Qt Pro语法总结

news2025/1/22 18:05:51

QT  pro文件:

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

项目中用到了哪些模块?

项目中包含哪些源文件,哪些头文件,它们的存储路径是什么?

项目使用哪个图片作为应用程序的图标?

项目最终生成的可执行文件的名称是什么?

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

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


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

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

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

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

QT -= gui

---------------------------------------------------------------------------------------------------------------------

Qt Pro语法总结_雾霾中的雪的博客-CSDN博客_qt pro target

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

TEMPLATE = app

1、TEMPLATE

A> app 这是默认值,所以如果模板没有被指定,这个将被使用。app模板告诉qmake为建立一个应用程序生成一个Makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。你应该在你的.pro文件中使用它们来为你的应用程序指定特定信息。

HEADERS:需要包含的头文件的列表。

SOURCES:需要的源文件的列表。

FORMS:需要的.ui文件的列表。

LEXSOURCES:所有lex源文件的列表。

YACCSOURCES:所有yacc源文件的列表。

TARGET:可执行应用程序的名称。默认值为项目文件的名字。

DESTDIR:放置可执行程序目标的目录。

OBJECTS_DIR:放置obj中间文件的目录。

MOC_DIR: moc转换文件路径。

RCC_DIR: 资源文件路径。

UI_DIR:ui文件转换的路径。

RESOURCES:需要包含的资源文件。

LIBS:依赖库的路径和名称 -L{xxdirxx} -l{xxnamexx}。

LIBEXT: 产生lib的后缀。

DEFINES:应用程序所需的额外的宏定义列表。

INCLUDEPATH:应用程序所需的额外的包含路径列表。

DEPENDPATH:应用程序所依赖的搜索路径。

VPATH:寻找补充文件的搜索路径。

DEF_FILE:只有Windows需要:应用程序所要连接的.def文件。

RC_FILE:只有Windows需要:应用程序的资源文件。

RES_FILE:只有Windows需要:应用程序所要连接的资源文件。

TRANSLATIONS: 多国语言支持文件。

INSTALLS: 要安装的文件。

target.path: 安装的路径。
 

B> lib   lib模板告诉qmake为建立一个库而生成makefile。当使用这个模板时,除了“app”模板中提到系统变量,还有一个VERSION是被支持的。你需要在为库指定特定信息的.pro文件中使用它们。

VERSION:目标库的版本号,例如:1.2.3。

C> vcapp - 建立一个应用程序的VisualStudio项目文件。
D> vclib - 建立一个库的VisualStudio项目文件。

E> subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
 

4. 指定生成的应用程序名

TARGET = pksystem

5. 配置信息

CONFIG 用来告诉 qmake 关于应用程序的配置信息。

例: CONFIG+= qt warn_on release c++11

在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的。
A> qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的。所有的Qt库都需要在CONFIG中添加之后才能使用,例如添加thread才能使用多线程库。
B> warn_on:编译器会输出尽可能多的警告信息。

warn_off:编译器会输出尽可能少的警告信息。
C> release部分告诉qmake应用程序必须被连编为一个发布的应用程序。在开发过程中,程序员也可以使用debug来替换release。

D> 使用C++11的特性

E>控制需要连接的库的选项:

qt:应用程序是一个Qt应用程序,并且Qt库将会被链接。

thread:应用程序是一个多线程程序。

x11:应用程序是一个x11应用程序或者库。

windows:只用于app模板,应用程序是一个windows下的窗口应用程序。

console:只用于app模板,应用程序是一个windows下的控制台应用程序。

dll:只用于lib模板,库是一个共享库。

staticlib:只用于lib模板,库是一个静态库。

plugin:只用于lib模板,库是一个插件,这将会使dll选项生效。

例如:CONFIG+= qt debug,使用qt库的应用程序,debug版本。

注意事项:必须使用“+=”,不要使用“=”,否则原来的设置会被清除。

6. 指定生成的应用程序放置的目录

DESTDIR +=../bin

7. 指定uic命令将.ui文件转化成ui_*.h文件的存放的目录

UI_DIR +=forms

8. 指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录

RCC_DIR +=../tmp

9. 指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录

MOC_DIR +=../tmp

10. 指定目标文件(obj)的存放目录

OBJECTS_DIR +=../tmp

11. 程序编译时依赖的相关路径

DEPENDPATH +=. forms include qrc sources

12. 头文件包含路径

INCLUDEPATH +=.

13. 执行qmake时输出消息

message(XXX) 会在执行qmake时输出括号中的内容

14. 获取系统参数

如 $$(PATH) 可以读取环境变量中的PATH

15. 平台相关性处理

我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:

win32 {
SOURCES += hello_win.cpp
}

Linux或Unix使用作用域unix。

16. 使用系统命令

主要是使用system关键字

例如拷贝文件到指定目录

win32 {

    src_dir = $$PWD\Resources\*.*

    CONFIG(debug, debug|release) {

        dst_dir = $$OUT_PWD\\debug\\Resources\\

    } else {

        dst_dir =$$OUT_PWD\\release\\Resources\\

    }

    # dst_dir 最后的 \\ 是必须的,用来标示 xcopy 到一个文件夹,若不存在,创建之

    # Replace slashes in paths with backslashesfor Windows

    src_dir ~= s,/,\\,g

    dst_dir ~= s,/,\\,g

    !exists(
dstdir):system(xcopy
src_dir$$dst_dir /y /e)

}
-------------------------------------------------------------------------------------------------------------

QT .pro文件解析(秒懂)_Mr.codeee的博客-CSDN博客_qt pro文件详解

4.编译为库

4.1静态库

TEMPLATE = lib
CONFIG += staticlib

4.2动态库

去掉CONFIG += staticlib这一行

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

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

相关文章

德育知识元素挖掘系统设计 软件工程 spring boot + Vue.js + python机器学习

第一章 绪论 摘要 当今社会发展迅速,机器学习相关技术快速在各行各业普及,制作数据挖掘系统的需求日益增长。同时,随着社会发展不断推进,对学生进行德育教育的规模越做越大,成为了教育行业发展的一大趋势。对于较大规模…

glibc 2.31 pwn——house of pig原题分析与示例程序

house of pig这种利用方式来源于XCTF 2021 final中的同名题,其原题使用的是libc 2.31版本,本文就根据这道题学习一下这种漏洞利用方式。 参考资料 这是一道C pwn,但漏洞本身与C不同于C的特性关系不大。 一共提供了5个选项: 增&…

idea无法安装插件

不能安装插件,首先需要确定是问题,最常见的是无法下载和安装不上, 1.无法下载解决版本 无法下载很多时候就是延迟太高导致的,我们先打开插件官网看一下 Python - IntelliJ IDEs Plugin | Marketplace 如果网站无法打开&#xf…

【测试】用例篇

努力经营当下,直至未来明朗! 文章目录一、设计测试用例的万能公式二、设计测试用例的具体方法1. 等价类2. 边界值3. 因果图(判定表)4. 场景设计法5. 正交法6. 错误猜测法:sparkles: 小结普通小孩也要热爱生活! 一、设…

JS数据类型判断的九种方式

JS 的数据类型检测是一道经典的八股文面试题。相信大家都能条件反射的回答出 4 种方法:typeof、constructor、instanceof 和 Object.prototype.toString,并且对它们各自的优缺点也是张口就来。 本文对这些方法做了简单归纳,同时又补充了其他…

Leetcode:112. 路径总和、113. 路径总和 II(C++)

目录 112. 路径总和: 问题描述: 实现代码与解析: 递归: 原理思路: 迭代: 原理思路: 113. 路径总和 II: 问题描述: 实现代码与解析: 迭代&#xff…

分享66个NET源码,总有一款适合您

NET源码 分享66个NET源码,总有一款适合您 NET源码下载链接:https://pan.baidu.com/s/1-H0UV3yly3p1PXbeLAvMtA?pwdk06f 提取码:k06f page_count 1 # 每个栏目开始业务content"text/html; charsetgb2312"base_url "http…

go defer return panic 执行顺序

根据代码实例运行结果来总结说明:定义一个函数,有多个defer (用于判断多个defer执行顺序),有panic和 return (判断与defer对比执行顺序)一、函数中有panicpackage mainimport "fmt"fu…

【矩阵论】8. 常用矩阵总结——秩1矩阵,优阵(单位正交阵),Hermite阵

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵,二次型,矩阵合同,正定阵,幂0阵,幂等阵,矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

【性能调优】【离线任务】flink处理离线任务(8000个小文件?200多亿数据量?)稳定性与性能调优探索

文章目录一、场景描述1. 任务类型描述2. 问题任务二、相关理论1.Task Slots and Resources1.1. slots与资源的隔离和共享1.2 建议cpu和slot数关系2. tm的资源配置是否合适2.1. flink load problems2.2. 阿里 flink资源配置建议三、问题分析与解决1. 测试结果比对1.1. 任务11.2.…

小程序学习(2)-----常用的各类组件

新建项目 项目->新建项目-小程序,如下图所示 新建小程序页面 只需要在 app.json->pages 中新增页面的存放路径,小程序开发者工具可帮我们自动创建对应的页面文件,如图所示: 2.常用的视图容器类组件 ① view 普通视图区域类…

Java基础算法每日5道详解(3)

136. Single Number 单号 Given a non-empty array of integers nums, every element appears twice except for one. Find that single one. You must implement a solution with a linear runtime complexity and use only constant extra space. 给定一个非空整数数组 nu…

在Multisim导入TI提供的SPICE模型

对在multisim中导入TI模型的一个记录。 multisim中只有常规的元器件,对于很多元器件multisim都没有相应的模型,这就需要手动导入了。 Multisim导入模型1、从官网下载相应的模型文件2、在Multisim中导入模型3、写在后面1、从官网下载相应的模型文件 &…

c/c++ 函数(一) setw()、isdigit()、isalpha()、atoi()、itoa()

目录 1、setw(int n) <iomanip> 2、int isdigit(char ch) <ctype.h> 3、int isalpha(int c) <ctype.h> 4、int atoi(const char* str) <stdlib.h> 5、char* itoa(int num) <stdlib.h> 1、se…

Linux 基本权限

目录 1 shell命令以及运行原理 1.1 理解 1.2 意义 2 Linux权限的概念 2.1 概念 2.2 用户分类 2.3 Linux文件属性 2.4 Linux文件权限 2.4.1 文件访问者的分类&#xff08;人&#xff09; 2.4.2 root&&普通用户 vs 拥有者&&所属组&&other 2.4…

异步架构,避免相互依赖的系统耦合

前言&#xff1a; 使用缓存架构可以减少不必要的计算&#xff0c;快速响应用户请求&#xff0c;但是缓存只能改善系统的读操作性能&#xff0c;也就是在读取数据的时候&#xff0c;可以不从数据源中读取&#xff0c;而是通过缓存读取&#xff0c;以加速数据的读取速度。 但是…

vulnhub DC系列 DC-6

总结:wpscan爆破&#xff0c;nmap提权 下载地址 DC-6.zip (Size: 619 MB)Download: http://www.five86.com/downloads/DC-6.zipDownload (Mirror): https://download.vulnhub.com/dc/DC-6.zip使用方法:解压后&#xff0c;使用vm直接打开ova文件。 漏洞分析 信息收集 这里还是使…

4. 数据处理:用R语言实现【多路替换】真高效!!

b站课程视频链接&#xff1a; https://www.bilibili.com/video/BV19x411X7C6?p1 腾讯课堂(最新&#xff0c;但是要花钱&#xff0c;我花99&#x1f622;&#x1f622;元买了&#xff0c;感觉讲的没问题&#xff0c;就是知识点结构有点乱&#xff09;&#xff1a;https://ke.qq…

Linux中的vim最小集、指令集及其配置

目录 1. vim 最小集 2 vim指令集 2.1 命令模式的指令 2.1.1 插入模式 2.1.2 移动光标 2.1.3 删除文字 2.1.4 复制 2.1.5 替换 2.1.6 撤销 2.1.7 更改 2.1.8 跳至指定的行 2.1.9 shift ~:快速大小写切换 2.2 末行模式的指令 2.2.1 set nu/set nonu 2.2.2 vs file…

【自学Python】Python变量

Python变量 Python变量教程 不论是使用哪种高级程序语言编写程序&#xff0c;变量都是其程序的基本组成单位。变量相当于内存中一个数据存储空间的表示&#xff0c;通过变量名可以访问到变量的具体的值。 Python变量 Python 是弱类型语言&#xff0c;因此 Python 变量无须声…