QT运行目录(和资源文件相关)
在QT Creator里,运行目录是在build目录下,而debug或release版本运行是在自己的目录下
图片等资源文件若已加载到qrc中,则怎么执行都能被找到,注意需在资源所在的路径名前加上其所在qrc的域
?
获得工作目录
如果你对工作目录依然不熟悉,QT运行目录(和资源文件相关)使用相对路径出现问题时,请首先考虑使用下列语句:
qDebug()<<QDir::currentPath();
看看和你预想的是否相符。
bool QDir::setCurrent ( const QString & path ) [static]而不是
bool QDir::cd ( const QString & dirName )bool QDir::cdUp ()void QDir::setPath ( const QString & path )
如何知道你程序自己在那个目录下,这是一个和平台相关的问题(ISO C、C++ 目前似乎还不能告诉我们答案)。幸好Qt提供了很好的封装了:
QString QCoreApplication::applicationDirPath () [static]
如果你想使用相对路径访问和可执行程序的同目录下的文件,你可以将工作目录设置成该目录!
或者(这应该是更好点的方法),用该目录和你的相对路径先直接组合成绝对路径再使用。
可是?,你有没有这个问题:当我们在windows下使用Qt的时候,生成的可执行程序会在debug或release目录下,我们要访问的文件在 project.pro 文件所在目录(或其子目录)下。这可怎么办是好?
如果你想访问工程目录下的doc/dbzhang800.txt文件:
|-- project.pro|-- doc/| `-- dbzhang800.txt||-- release/| `-- abc.exe|`-- debug/ `-- abc.exe
直接
QFile(doc/dbzhang800.txt);
好用么?如果在QtCreator 等环境下运行,一般可以工作,可是,进到debug下双击,却不工作了(不要告诉我你看了上面内容还不知道原因哈)。
问题的解决方案来自C++ GUI Qt4 编程一书,我相信你肯定见过这个函数:
QDir directoryOf(const QString &subdir){ QDir dir(QApplication::applicationDirPath());#if defined(Q_OS_WIN) if (dir.dirName().toLower() == "debug" || dir.dirName().toLower() == "release" || dir.dirName().toLower() == "bin") dir.cdUp();#elif defined(Q_OS_MAC) if (dir.dirName() == "MacOS") { dir.cdUp(); dir.cdUp(); dir.cdUp(); }#endif dir.cd(subdir); return dir;}
这个函数怎么用????我们只需要:
QFile(directoryOf("doc").absoluteFilePath(dbzhang800.txt));
?