更改Qt应用程序的当前路径

时间:2015-06-25 07:30:23

标签: c++ qt

我正在使用Qt库,我想设置QString oldConfigFileName中包含的路径的当前路径,我正在使用setCurrent()但setCurrent返回一个false值,表示更改路径失败。 代码:

QString path = QDir::currentPath();
std::string currentpath  = path.toStdString();
std::string configPath = oldConfigFileName.toStdString();
bool res = QDir::setCurrent(oldConfigFileName);
if(res)
 {
    qDebug() << "Path Changed";
 }
else
{
  qDebug() << "Path not changed";
}

2 个答案:

答案 0 :(得分:0)

在不知道oldConfigFileName的实际内容的情况下,失败的一个原因可能是该路径不存在。在调用QDir :: setCurrent() - 方法之前检查路径的存在可能是个好主意。

if(!QDir(oldConfigFileName).exists())
{
    qDebug() << "Path does not exists.";
    // Path does not exists, if needed, it can be created by
    // QDir().mkdir(oldConfigFileName);
}

失败的另一个原因可能是oldConfigFileName不包含有效的路径字符串。要检查一下,我会按照以下方式更改调试日志:

if(res)
{
    qDebug() << "Path Changed";
}
else
{
    qDebug() << "Path not changed. Path string = " << oldConfigFileName;
}

答案 1 :(得分:0)

问题是您使用的路径是包含文件名的配置文件的完整路径。当您尝试将目录更改为此路径时,该命令将失败,因为oldConfigFileName是一个文件而不是现有文件夹。解决此问题的一种简单方法是使用QFileInfo从路径中删除文件名部分,然后将其用作目录。

QFileInfo fi(oldConfigFileName); 
bool res = QDir::setCurrent(fi.path());

if(res)
 {
    qDebug() << "Path Changed";
 }
else
{
  qDebug() << "Path not changed";
}