0

プログラムを起動すると、ファイルダイアログは特定のディレクトリにあります。次に、他のディレクトリに移動し、いくつかのファイルを選択します。ファイルが選択されたら、ファイルが選択されている現在のディレクトリを取得しようとします。しかし、現在のディレクトリは返されません。プログラムが開始されたときにファイルダイアログが最初にあった元のディレクトリが返されます。コード スニペットは次のとおりです。

QFileDialog * fileDialog = new QFileDialog(this);
fileDialog->setFileMode(QFileDialog::ExistingFiles);
QListView* list = fileDialog->findChild<QListView*>("listView");
if(list)
{
    list->setSelectionMode(QAbstractItemView::MultiSelection);
}
QTreeView* tree = fileDialog->findChild<QTreeView*>();
if(tree)
{
    tree->setSelectionMode(QAbstractItemView::MultiSelection);
}
if(fileDialog->exec())
{
    if(fileDialog->selectedFiles().size()>0)
    {
        QDir dir = fileDialog->directory();
        fileDialog->update();
        qDebug()<<dir.absolutePath();
    }
}

私がしている間違いを教えていただけますか?ファイルダイアログが現在あるディレクトリの絶対パスを取得するにはどうすればよいですか?

4

2 に答える 2

1

QFileDialog には、選択したファイルと現在のディレクトリ getExistingDirectory、getOpenFileName、getOpenFileNames、getSaveFileName を返すいくつかの静的メソッドがあります。これらの静的関数のいずれかを使用したい場合があります。もう 1 つのオプションは、QFileDialog をサブクラス化し、exec メソッドをオーバーライドして現在のディレクトリを返すことです。http://qt-project.org/doc/qt-4.8/qfiledialog.html

于 2014-03-31T13:55:08.923 に答える
0

他の人が提案するような静的メソッドに置き換えることができますが、最初にメモリリークを修正する必要があると思います!

NEWQFileDialogを作成しているので、毎回同じディレクトリを取得することに注意してください。このダイアログは一度だけ使用し、thisオブジェクト (おそらくメイン ウィンドウ) があると削除されます。

そのため、静的バージョンを使用するか、メイン ウィンドウ クラスにフィールドを作成してダイアログを 1 つだけ作成し、必要に応じて再利用します。

于 2014-03-31T16:25:27.263 に答える