如何将Qt .Pro文件中的自定义变量内容 或 内置变量的内容 获取 到Qt的.cpp或.h中使用,如Qt的main.cpp中如何获取使用.pro文件中的$$PWD等内置变量的值

这应该仍算是Qt入门知识,惭愧啊!

有没有同学遇到过想获取Qt项目.pro文件所在路径的,但是常规获取Qt获取文件路径方式,获得的路径并非我们想要,如我想获取resources的路径
在这里插入图片描述

    qDebug() << QApplication::applicationDirPath() << endl;
    qDebug() << QDir::currentPath() << endl;

输出 (这里有没有想骂娘的同学,我可不想要运行路径啊,我要.pro的所在路径)

"D:/QtProjects/build-multi-drone-qumake-Desktop_Qt_5_12_12_MinGW_64_bit-Debug/debug" 
"D:/QtProjects/build-multi-drone-qumake-Desktop_Qt_5_12_12_MinGW_64_bit-Debug" 

此时,我们想到pro里,常年写pro, P W D 或 PWD或 PWD_PRO_FILE_PWD_的值就是我们要的

message($$PWD)

# 添加.pro所在文件路径到代码中去使用
DEFINES += PRO_FILE_PATH=$$_PRO_FILE_PWD_

输出

D:/QtProjects/multi-drone-qumake 

所以,TMD,你把pro的自定义变量或内置变量的内容给我取到.cpp或.h用,不就解了吗?
脑袋里定义想法就是DEFINES +=xxxpro里的宏可以在.cpp或.h里使用呢,只是平时用宏来条件编译,今天看来我需要获取宏的值了,试了一下将宏的值设为数字DEFINES += Value=45,在main.cpp里打印宏Value,值是打印对了

但是
DEFINES += PRO_FILE_PATH=$$_PRO_FILE_PWD_
main.cpp中直接打印宏PRO_FILE_PATH,编译报错
在这里插入图片描述
不得不说这个报错error,真的很经典,我是编译器我也一定给你报错,而且是一定告诉你下面D开头的这串是个啥东西啊,亲爱的码儿
在这里插入图片描述
不巧,偷瞄到编译输出里的 -DPRO_FILE_PATH=D:/QtProjects,这不就是我在pro里定义的宏吗?哦!原来.cpp不认识这个D:QtPro开头的这个东西,那我就让cpp把它理解成字符串就成了,不就是个把宏的字符串替换吗

#define SSS(R) #R
#define TTT(R) SSS(R)

// 获取宏本身的字符串值
#define GetProContent(R) #R

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qDebug() << QApplication::applicationDirPath() << endl;
    qDebug() << QDir::currentPath() << endl;
    // 获取.pro所在文件路径,不想要debug/路径
    qDebug() << GetProContent(PRO_FILE_PATH) << endl;
    qDebug() << TTT(PRO_FILE_PATH) << endl;
    qDebug() << PRO_FILE_PATH << endl;

但是,沃日!一波三折,最开始GetProContent(PRO_FILE_PATH)打印出来是字符串PRO_FILE_PATH,差点吐血,我是要它的值啊,编译器老哥,但是回过神来,C语言大哥讲过,要将宏的值取成字符串,要宏转义两道,所以想到了TTTSSS

PRO_FILE_PATH 

D:/QtProjects/multi-drone-qumake 

终于大功告成!!!输出了自己想要的D:/QtProjects/multi-drone-qumake,我的pro文件所在文件路径,第一Pro没玩明白,其二C语言大哥的宏那套也没弄明白,话说,是不是该睡觉了啊!

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值