Когда я запускаю программу, filedialog находится в определенной директории. Затем я перехожу в другие каталоги и выбираю несколько файлов. Как только файлы выбраны, я пытаюсь получить текущий каталог, из которого они выбраны. Но он не возвращает мне текущий каталог, он возвращает мне исходный каталог, в котором файл filedog был изначально при запуске программы. Фрагмент кода, как показано ниже:
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();
}
}
Не могли бы вы сказать мне, какую ошибку я делаю? Как получить абсолютный путь к каталогу, в котором в данный момент находится filedialog?
QFileDialog имеет несколько статических методов, которые возвращают выбранный файл и текущий каталог getExistingDirectory, getOpenFileName, getOpenFileNames, getSaveFileName. Возможно, вы захотите использовать одну из этих статических функций. Другим вариантом является создание подкласса QFileDialog и переопределение метода exec для возврата текущего каталога. http://qt-project.org/doc/qt-4.8/qfiledialog.html
Вы можете заменить его статическими методами, как предлагают другие, но я думаю, что сначала вы должны исправить утечку памяти!
Обратите внимание, что если вы создаете НОВЫЙ код QFileDialog
Вот почему вы получаете один и тот же каталог каждый раз. Вы используете этот диалог только один раз, и он удаляется при this
объект (вероятно, главное окно).
Поэтому используйте либо статическую версию, либо создайте поле в своем классе главного окна и создайте только один диалог и используйте его при необходимости.