QT运行目录(和资源文件相关)

本文详细介绍了在QT Creator中如何管理运行目录、资源文件路径及qm翻译文件的位置。包括如何获取当前工作目录、修改工作目录、访问程序所在目录下的文件,并提供了解决跨debug/release目录访问问题的实用函数。通过示例代码演示了如何正确地访问不同目录下的文件。


QT Creator里,运行目录是在build目录下,而debugrelease版本运行是在自己的目录下

图片等资源文件若已加载到qrc中,则怎么执行都能被找到,注意需在资源所在的路径名前加上其所在qrc的域

对于qm翻译文件,须拷贝到执行目录

 

1. 获得工作目录

如果你对工作目录依然不熟悉,QT运行目录(和资源文件相关)使用相对路径出现问题时,请首先考虑使用下列语句:

qDebug()<<QDir::currentPath();

看看和你预想的是否相符。

 

2. 修改工作目录

你很少需要这个操作,如果你用到了,请注意

bool QDir::setCurrent ( const QString & path ) [static]

而不是

bool QDir::cd ( const QString & dirName )

       bool QDir::cdUp ()

void QDir::setPath ( const QString & path )

 

3. 程序所在目录

如何知道你程序自己在那个目录下,这是一个和平台相关的问题(ISO CC++ 目前似乎还不能告诉我们答案)。幸好Qt提供了很好的封装了:

QString QCoreApplication::applicationDirPath () [static]

如果你想使用相对路径访问和可执行程序的同目录下的文件,你可以将工作目录设置成该目录,或者(这应该是更好点的方法),用该目录和你的相对路径先直接组合成绝对路径再使用。

可是 ,你有没有这个问题:当我们在windows下使用Qt的时候,生成的可执行程序会在debugrelease目录下,我们要访问的文件在 project.pro 文件所在目录(或其子目录)下。这可怎么办是好?

 

4. 一个有用的函数

如果你想访问工程目录下的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));

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值