Qt Pro 常用配置

news2024/12/12 9:19:49

Part1: Summary

Qt 开发中 Pro 文件的内容很多,需要不断的去学习和使用,现系统性的整理一下。以备录;

1.创建pro文件

1.1 步骤:

Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为:Demo  --->类信息保持不变--->完成

1.2 pro文件

在工程目录下,Demo 目录下打开pro的文件,内容如下:

#-------------------------------------------------
#
# Project created by QtCreator 2024-06-22T20:11:39
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
QT += concurrent
TARGET = TestDemo
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has 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

CONFIG += c++11

SOURCES += \
        main.cpp \
        mainwindow.cpp \
    mydirectionbutton.cpp


HEADERS += \
        mainwindow.h \
    mydirectionbutton.h


FORMS += \
        #cutestl.ui \
        mainwindow.ui \


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

RESOURCES += \
    image.qrc

Part2:各项意义

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

2.1 组成:

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

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

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

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 语句。
HEADERS指定项目中包含的所有 .h 头文件。
FORMS指定项目中包含的 ui 文件。
INCLUDEPATH指定头文件的存储路径,例如:INCLUDEPATH += /opt/ros/include
CONFIG经常对应的值有: release:以 release 模式编译程序;debug:以 debug 模式编译程序;warn_on:编译器输出尽可能多的警告;c++11:启动 C++11 标准支持。例如 CONFIG += c++11。

上表中,大部分配置项自动生成不需要我们手动修改,比如 SOURCES、HEADERS、FORMS 等,当我们添加或者删除项目中的源文件时,Qt 会自动修改这些配置项。有些配置项需要手动修改,比如 QT 配置项. 

2.Qt配置项

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

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

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

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

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

QT -= gui

如需要  包含操作数据库相关的类 SQL

QT += sql

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

#include <QEventLoop> 

紧接着,鼠标选中“

QEventLoop ”并按Fn+F1组合键,打开下图所示的 QEventLoop
类使用手册,可以看到该类所属的模块为 Core; 需要在 Pro 文件中添加 QT+=core; 这个是默认添加的;

 3.TARGET

指定编译后生成的目标文件名称

4.TEMPLATE

指定生成的目标类似 app, lib;

5. DESTDIR

指定最终文件生成的目录

6.LIBS:

指定工程要链接的库路径

7.INCLUDEPATH:

指定工程要加载的头文件路径

INCLUDEPATH += .

8.DEPENDPATH:

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

DEPENDPATH += . forms include qrc sources

9. INSTALLS:

指定make install后程序的目录

10.DEFINES 

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

11.SOURCES:

当前工程中的C++源文件,一般不需要手动修改

12.HEADERS

当前工程中的C++头文件

13.FORMS

当前工程中的ui文件

14.RESOURCES

当前工程的资源文件

Part 3: CONFIG 配置变量,指定了编译器所要使用的选项和所需要链接的库

   3.1 控制编译器标志的选项:

         release:应用程序将以release模式连编,如果“debug”被指定,它将被忽略。
        debug:应用程序将以debug模式连编。
        warn_on:编译器会输出尽可能多的警告信息,如果“warn_off”被指定,它将被忽略。
        warn_off:编译器会输出尽可能少的警告信息。

    3.2控制需要连接的库的选项:

     qt:应用程序是一个Qt应用程序,并且Qt库将会被链接。
        thread:应用程序是一个多线程程序。
        x11:应用程序是一个x11应用程序或者库。
        windows:只用于app模板,应用程序是一个windows下的窗口应用程序。
        console:只用于app模板,应用程序是一个windows下的控制台应用程序。
        dll:只用于lib模板,库是一个共享库。
        staticlib:只用于lib模板,库是一个静态库。
        plugin:只用于lib模板,库是一个插件,这将会使dll选项生效。

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

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

例:可以指定,release ,debug 依赖的不同库;

CONFIG(debug, release|debug){
  LIBS += 
} else {
  LIBS += 
}

例: window ,linux 使用不同版本库

CONFIG(debug, debug|release){  //处理debug
    win32{
    }
    unix{
    	contains(QT_ARCH, arm64){
			message("arm64")
			}else{
			message("x86")
			}
    }
}else{     //处理release
    win32{
    }
    unix{
    }

 

Part4 : contains

判断编译环境是x86架构还是arm架构

contains(QT_ARCH, arm64){
    message("arm64") #在这里处理arm64所需
}else{
    message("x86")
}

内容比较多,可能要多次整理,今天就到这里

 

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

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

相关文章

软件测试--录制与回放脚本

准备工作 安装phpstudy 配置两个内容 放demo44文件夹 在浏览器输入http://localhost/demo44/index.html&#xff0c;出现如图所示的网站 输入用户名和密码 步骤一&#xff1a;打开Virtual User Generator&#xff0c;点击新建&#xff0c;点击new 步骤二&#xff1a;点击如下…

WEB安全基础知识

WAF全称为Web Application Firewall&#xff08;网页应用防火墙&#xff09;是一种专门设计用来保护web应用免受各种网络攻击的安全防护措施。它位于客户端与服务器之间&#xff0c;监控和过滤HTTP流量&#xff0c;从而拦截恶意请求、识别并防御常见的web攻击。 WAF的主要功能…

android studio kotlin 本地c++工程添加oboe库的方法

1.新建本地c++的kotlin工程hellohao 如图 2.把开源的oboe源文件src、include、CMakelists.txt、debug-utils复制hellohao目录下 3.修改hellohao\app目录下的CMakelists.txt cmake_minimum_required(VERSION 3.22.1) project(hellohao LANGUAGES C CXX)get_filename_component…

ElasticSearch常见的索引_集群的备份与恢复方案

方案一&#xff1a;使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移&#xff0c;包括全量、增量备份和恢复。 方案二&#xff1a;通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移&#xff0c;或者跨集…

cefsharp131.2.70升级cefsharp131.3.10( Chromium 131.0.6778.109)NETCore 版本升级体验

一、版本 cefsharp 131.3.10 小版本升级:cefsharp 131.2.70>>cef 131.3.10 CEF 131.3.1+gcb062df+chromium-131.0.6778.109 / Chromium 131.0.6778.109 二、测试(html5test)

#自定义数据类型-模拟进程执行

#include <iostream> #include <string> #include <iomanip> using namespace std;//定义一个名为process的结构体&#xff0c;用于表示进程相关信息 //包含进程名、进程ID、进程优先级、进程状态、进程所需CPU时间、进程描述等成员 struct process {string …

多线程的知识总结(8):用 thread 类 或全局 async (...) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数

&#xff08;40&#xff09;用 thread 类 或全局 async (…) 函数&#xff0c;创建新线程时&#xff0c;谁才是在新线程里第一个被执行的函数&#xff1f; 弄清楚这个问题&#xff0c;有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async &#xff08;…&#xff0…

12月11日IO进程线程

作业1、创建子父进程&#xff0c;子进程将1.txt内容拷贝到2.txt中&#xff0c;父进程将3.txt内容拷贝到4.txt中。 #include <myhead.h>int main(int argc, const char *argv[]) {//创建子父进程pid_t pidfork();if(pid>0) //父进程{//打开文件1文件2int fd1open(&q…

TikTok无网络黑屏原因及解决方法

TikTok运营中最常见的问题就是出现黑屏和“Something went wrong”“No internet connection”等字样&#xff0c;这时TikTok往往已经无法正常使用&#xff0c;大大影响运营流程。那么这种情况是什么原因&#xff0c;又有什么解决办法&#xff1f; 一、无网络黑屏原因 1.‌地理…

在 Ansys Mechanical 中使用“螺栓工具”插件自动生成螺栓

总结 在有限元分析 &#xff08;FEA&#xff09; 中&#xff0c;高效创建螺栓连接对于确保机械装配的结构完整性和性能至关重要。螺栓是连接组件不可或缺的一部分&#xff0c;它们在负载下的精确建模会影响整个系统。快速高效的螺栓建模使工程师能够快速优化设计&#xff0c;满…

西门子200 smart PLC助力水处理企业自动化改造

摘要 西门子的200SMART PLC&#xff0c;以其强大的功能和灵活的应用性&#xff0c;正成为环保行业中不可或缺的一环。今天&#xff0c;我们就来看看这个小小的PLC是如何在处理环保问题中大显身手的。 不得不说&#xff0c;环保行业的痛点可不少。 比如污水处理&#xff0c;传…

【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞

目录 漏洞介绍 影响版本 环境搭建 查看版本 漏洞复现 手动复现 漏洞 poc Magento Open Source 是一个免费开源的电子商务平台&#xff0c;适合中小企业或开发团队通过自定义代码和插件创建在线商店。它由社区开发和支持&#xff0c;功能强大但需要更多的技术投入。Adobe…

智能合约的离线签名(EIP712协议)解决方案

引言&#xff1a;本文由天玄链开源开发者提供&#xff0c;欢迎报名公益天玄链训练营 https://blockchain.163.com/trainingCamp 一、解决核心问题 项目方不支付gas费&#xff0c;由用户自己发起交易&#xff0c;用户支付gas费。用户的数据保存在链下服务器中&#xff0c;tok…

Vmware的网络适配器的NAT模式和桥接模式有何区别?如何给Uubunt系统添加桥接网卡?

Vmware的网络适配器的NAT模式和桥接模式有何区别&#xff1f; 如何给Uubunt系统添加桥接网卡? 步骤如下&#xff1a;

有源模拟滤波器的快速设计

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 几乎所有电子电路中都能看到有源模拟滤波器的身影。音频系统使用滤波器进行频带限制和平衡。通信系统设计使用滤波…

HarmonyOS 非线性容器TreeSet 常用的几个方法

TreeSet基于TreeMap实现&#xff0c;在TreeSet中&#xff0c;只对value对象进行处理。TreeSet可用于存储一系列值的集合&#xff0c;元素中value唯一且有序。 TreeSet和HashSet相比&#xff0c;HashSet中的数据无序存放&#xff0c;而TreeSet是有序存放。它们集合中的元素都不允…

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现二分查找的算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.根据键盘输入的一组有序数据建立顺序表&#xff0c;2.顺序表的输…

从混沌到清晰:全面解析非结构化数据治理!

一、非结构化数据的定义 定义 非结构化数据是指不遵循固定模式或不具有预定义数据模型的数据。与结构化数据不同&#xff0c;非结构化数据没有固定的格式&#xff0c;其内容和结构通常由数据的自然形式决定。 关键特征 &#xff08;1&#xff09;多样性&#xff1a;包括文本、…

【蓝桥杯最新板】蓝桥杯嵌入式液晶上实现电子时钟

这几年蓝桥杯比赛比较适合学生技能学习&#xff0c;考虑板子功能&#xff0c;提出完成的任务。 要求在液晶完成如下图效果&#xff1a; 主要是实现液晶显示时钟和数字时钟&#xff0c;具体样式可以依据实际情况微调。 实现过程&#xff1a; 1.需要画圆&#xff08;外圆、内圆…

[WiFi] WiFi安全加密WEP Vs WPA Vs WPA2 Vs WPA3整理

WiFi安全标准时间线 WEP&#xff08;Wired Equivalent Privacy&#xff09; WEP最早于1997年推出&#xff0c;是为了保护无线网络上的数据通信而设计的。当时&#xff0c;Wi-Fi技术还处于起步阶段&#xff0c;人们开始意识到需要一种安全协议来防止未经授权的访问和窃听。WEP被…