0

私が使用しているもののスニペットは次のようになります

QDir lastDir;
QFileDialog dial(this);

dial.getOpenFileName(this,
                     tr("Open File"),
                     QString("/home"),
                     tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));

lastDir = dial.directory();
qDebug() << lastDir;

最終的にどのディレクトリに移動しても、出力は完全に間違っています。ただし、間違ったディレクトリは常に同じです。

AFAICT私はここで何も悪いことをしていません。ここで何が起こっているのですか?乾杯

4

1 に答える 1

3

getOpenFileName()は、「ファイル ピッカー」ダイアログをすぐに開き、ユーザーがダイアログを終了すると、「ユーザーが選択した既存のファイル」を返す静的関数です。次のように使用します (オブジェクト名の代わりに::と クラス名を使用することに注意してください)。QFileDialog

QString fileName = QFileDialog::getOpenFileName(this,
                 tr("Open File"),
                 QString("/home"),
                 tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));

directory()非静的で、「現在ダイアログに表示されているディレクトリ」を返します。この関数は、ダイアログがまだ開いている間に呼び出されることを意図しており、静的呼び出しではカバーされないユースケースを対象としています。


ここで起こっているのは、オブジェクトをインスタンス化し、その上で静的関数を呼び出し (その状態には影響しません)、次に呼び出しdirectory()て、オブジェクトの元の状態 (おそらく作業ディレクトリ) を反映するだけです。getOpenFileName()代わりに、上記のように、呼び出しの戻り値を変数に格納する必要があります。

ユーザーにディレクトリを選択するように求めたい場合は、getExistingDirectory()代わりに使用することを検討できます。または、ファイル名からディレクトリを抽出したい場合、QDirクラスにはこれに役立つ関数がいくつかあります。

于 2011-01-24T23:39:30.800 に答える