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

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


person 138    schedule 22.09.2015    source источник


Ответы (2)


QDir().cd(dirName)

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

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

QDir dir;
dir.cd(dirName);
dir.path();
person James Adkison    schedule 22.09.2015
comment
очень красивое объяснение. - person user23573; 22.09.2015
comment
Ничего себе, я чувствую себя глупо ... Большое спасибо за это объяснение - person 138; 22.09.2015

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

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

QDir::setCurrent(new_base_path);
QFile("some_relative_file_name");
...
person Orest Hera    schedule 22.09.2015