1

現在、新しいディレクトリを作成し、このディレクトリ内に新しいファイルを作成しようとしています。ただし、QDir はこのファイルが存在することを認識しますが、新しいディレクトリに cd しようとすると、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

なぜこれが機能しないのか本当にわかりません。私はプログラミングにかなり慣れていないので、なぜそうなのか疑問に思っていました。

4

2 に答える 2

3
QDir().cd(dirName)

実行するたびQDir()に、オブジェクトの新しいインスタンスを作成し、それに対して操作を実行します (つまり、.cd(dirName))。最終的にそのオブジェクトはスコープ外になり、破棄されます。したがって、すべての変更が失われます。

代わりに、単一のインスタンスを作成し、それに対してすべての操作を実行する必要があります。

QDir dir;
dir.cd(dirName);
dir.path();
于 2015-09-22T20:14:54.810 に答える
1

コンストラクターは、プログラムの作業ディレクトリを指すオブジェクトQDir()を作成します。オブジェクト ディレクトリを変更しますが、プログラム ディレクトリは変更しません。現在のアプリケーションの作業ディレクトリを本当に変更したい場合は、以下を参照してください。QDirQDir()::cd()QDirQDir()::setCurrent(const QString & path)

その現在のアプリケーション ディレクトリは、ファイルの相対パスとして使用されます。したがって、新しいディレクトリにファイルを作成するには、完全なファイル パスを指定するか、相対パスを次のように使用します。

QDir::setCurrent(new_base_path);
QFile("some_relative_file_name");
...
于 2015-09-22T20:24:52.590 に答える