2011-01-24 14 views
0

私はこのQFiledialogは、間違ったディレクトリ

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ここでは何も間違っていません。ここで何が起こっているのですか?乾杯」

+0

ええと、ドキュメントをもっと近く読んでいるはずです。 msgstr "現在ダイアログに表示されているディレクトリを返します。"私が一度も見たことのないディレクトリを返すのは不思議です。 – regomodo

答えて

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クラスにはこのために便利な関数がいくつかあります。

+0

ありがとう、もう少しドキュメントを読んだ後、私は自分のエラーを認識しました。後は、ダイアログで表示されたディレクトリのqdir/qstringだった。最後に、_getOpenFileName_から返されたQStringを使用し、ファイル名を切り捨てました。そのようにして次回私がfiledialogを開くと、私は最後に見たフォルダに戻ります。私の作業ディレクトリが "/ media/data/Projects/C++/rawviewer /"だったとき、_directory_のディレクトリは "/ media/data/Projects/python/Gereqi/icons"でした。奇妙な。 – regomodo

関連する問題