LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2660|回复: 6

QT4.0中关于获得程序当前目录的问题?

[复制链接]
发表于 2007-4-6 09:31:16 | 显示全部楼层 |阅读模式
用QT写的一个程序需要读写当前目录下的自定义配置文件,用的是相对路径。
(1)在shell下执行(程序当前目录) ./program
      能够正常读取配置文件,且查看QDir::currentPath()为/home/user/MyProc; QDir::homePath为/home/user。
(2)但在KDE桌面环境下,单击程序图标却找不到配置文件, 而QDir::currentPath()变成了/home/user。
   这是什么原因,难道所有的配置文件都要弄到用户目录下么,或者要用绝对路径?
  该怎么样才能在KDE下使用相对路径? 研究不多,谢谢指教
发表于 2007-4-6 10:40:38 | 显示全部楼层
  1. char* get_exe_path()
  2. {
  3.         static char buff[256];
  4.         char *p;
  5. #if defined(WIN32)
  6.         ::GetModuleFileName(NULL, buff, sizeof(buff));
  7.         p = strrchr(buff, '\\');
  8. #else
  9.   int pid;
  10.   pid = getpid();
  11.   sprintf(buff, "/proc/%d/exe", pid);
  12.   readlink(buff, buff, sizeof(buff));
  13.   p = strrchr(buff, '/');
  14. #endif
  15.   *p = 0;
  16.   return buff;
  17. }
复制代码
这是我在用的取程序执行文件所在路径的函数

一般来说,current path是指程序执行时,环境的当前目录,不一定是执行文件所在目录
比如我可以在/下执行/home/user/MyProc, 这时候,current path是/
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-6 16:34:32 | 显示全部楼层
不错,谢谢。你的方法可行,不知道在QT中还有没有相关的函数来实现执行文件所在目录
回复 支持 反对

使用道具 举报

发表于 2007-4-6 16:59:48 | 显示全部楼层
X11的 方法平台相关性很强,你试试解析这个来获得程序文件的目录
int main( int argv, char **argv )
其中 argv[0] 是可执行文件的路径,不知道不同的编译器实现的会不会有不同的结果。
回复 支持 反对

使用道具 举报

发表于 2007-4-6 17:23:13 | 显示全部楼层
QCoreApplication::applicationDirPath ()
这个方法可以会的可执行程序的路径。
回复 支持 反对

使用道具 举报

发表于 2007-4-6 17:26:11 | 显示全部楼层
实际上QCoreApplication也是解析argv获得的这个路径,在你 QApplication app( argc, argv );
的时候它解析的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-9 10:27:41 | 显示全部楼层
又学了一些,谢谢大家了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表