首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

使用QT踩过的坑之 -QDir::currentDir()

  • 25-02-16 09:41
  • 3395
  • 9878
blog.csdn.net

使用QT踩过的坑之 -QDir::currentPath()

QDir::currentPath()很容易被误用,而且不容易被发现。首先来看下QT官方对QDir::currentPath()的解释。
QString QDir::currentPath()
Returns the absolute path of the application’s current directory. The current directory is the last directory set with QDir::setCurrent() or, if that was never called, the directory at which this application was started at by the parent process.
上面的解释的意思是,QDir::currentPath返回的是应用的绝对路径,这个路径是上次通过QDir::setCurrent()设置的路径,或者如果QDir::setCurrent()这个目录从来没有被调用过,那个这个路径是启动它的父进程的路径。
所以如果不明所以的使用了这个API,会发生以下的几件匪夷所思,但是却十分合情合理的事情。
1)如果在QtCreator当中使用这个路径,然后通过QtCreator执行程序,它会返回的是源码的路径;这是因为QtCreator当前的路径是源码路径,而QtCreator又是编译出的执行文件的父进程,因此根据解释,此时的路径是源码的路径;
2)如果编译、打包完成之后,在打包文件夹当中,去执行这个程序,此时QDir::currentPath()代表的路径,又变成了可执行程序的路径;
3)同理,如果该程序被其它程序以进程的方式调用,此时QDir::currentPath()的路径也会变成父进程的路径,这会导致一些非常迷惑的行为,而这些错误又很难排查。
所以,如果编码人员不明所以的使用了该API去在程序当中导入一些配置文件路径或者资源文件的路径,此时在QtCreator直接编译运行或者被其它进程调用运行和这个程序自身双击运行,就会导致不同的行为。
所以,对于QT编写程序,配置资源文件的路径,建议使用的API为QCoreApplication::applicationDirPath(),这个API返回的路径是包含可执行程序的路径,这上面三种工况下均返回同一个路径。
如果使用了该路径,对应的资源文件、配置文件在QtCreator进行调用的时候,也应该拷贝到对应的含有可执行文件的编译文件夹当中,之后使用windeployqt进行一起打包,就好。

注:本文转载自blog.csdn.net的CPPlusQt的文章"https://blog.csdn.net/Blunt_Du/article/details/135587467"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top