QDir currentPath и cd () не работают?

В настоящее время я пытаюсь создать новый каталог и создать новый файл внутри этого каталога. Однако QDir распознает, что этот файл существует, однако, когда я пытаюсь перейти в мой новый каталог, currentPath возвращает одно и то же значение до и после QDir().cd(dirName)

QDir().cdUp();
if(!QDir(dirName).exists())
QDir().mkdir(dirName);
qDebug() << QDir().currentPath();    // returns a path up from exe dir
if(QDir().cd(dirName))
qDebug() << QDir().currentPath(); //returns the same path as above

На самом деле не уверен, почему это не работает, я довольно новичок в программировании, и мне было интересно, почему это так.

0

Решение

QDir().cd(dirName)

Каждый раз, когда вы выполняете QDir() вы создаете новый экземпляр объекта, затем выполняете операцию над ним (т.е. .cd(dirName)) и, наконец, этот объект выходит из области видимости и уничтожается; тем самым теряя все ваши изменения.

Вместо этого вы должны создать один экземпляр и выполнить все операции над ним.

QDir dir;
dir.cd(dirName);
dir.path();
2

Другие решения

Конструктор QDir() создает QDir объект, указывающий на рабочий каталог программы. QDir()::cd() изменения, которые QDir каталог объекта, однако он не меняет каталог программы. Если вы действительно хотите изменить текущий каталог приложения, см. QDir()::setCurrent(const QString & path)

Этот текущий каталог приложения используется как относительный путь к файлам. Таким образом, чтобы создать файл в новом каталоге, вы можете указать полный путь к файлу или использовать относительный путь как:

QDir::setCurrent(new_base_path);
QFile("some_relative_file_name");
...
0