这应该仍算是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 +=xxx
,pro
里的宏可以在.cp
p或.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语言大哥讲过,要将宏的值取成字符串,要宏转义两道,所以想到了TTT
和SSS
PRO_FILE_PATH
D:/QtProjects/multi-drone-qumake
终于大功告成!!!输出了自己想要的D:/QtProjects/multi-drone-qumake
,我的pro
文件所在文件路径,第一Pro没玩明白,其二C语言大哥的宏那套也没弄明白,话说,是不是该睡觉了啊!