Диалог браузера папки в Qt
Есть ли способ открыть диалоговое окно браузера папок в Qt? Когда я использую QFileDialog
с файловым режимом Directory
, даже если я укажу опцию ShowDirsOnly
, я получаю стандартный диалог файла. Я бы предпочел использовать диалог, который просит пользователя выбрать каталог из дерева каталогов.
Вот код PySide, который я использую:
from PySide import QtGui
app = QtGui.QApplication([])
dialog = QtGui.QFileDialog()
dialog.setFileMode(QtGui.QFileDialog.Directory)
dialog.setOption(QtGui.QFileDialog.ShowDirsOnly)
dialog.exec_()
И вот результат, который я получаю в Windows 7:
![File selection dialog]()
Ответы
Ответ 1
Похоже, что порядок, в котором вы называете setFileMode()
и setOption()
, имеет значение. Убедитесь, что вы сначала вызываете setFileMode()
:
QFileDialog dialog;
dialog.setFileMode(QFileDialog::Directory);
dialog.setOption(QFileDialog::ShowDirsOnly);
...
Ответ 2
Я знаю, что мой ответ несколько сложный и выглядит как маленький взлом, но статические методы QFileDialog
, такие как getExistingDirectory()
, используют собственный диалог, поэтому возможна только ограниченная настройка.
Однако, если вы создаете экземпляр QFileDialog
, вы получите диалоговое окно, которое может
настраиваться - пока вы счастливы возиться с живым диалогом.
Например, это должно показать древовидное представление с расширяемыми каталогами, которые
вы можете выбрать (надеюсь, что это не проблема с этим кодом для PySide):
QFileDialog *fd = new QFileDialog;
QTreeView *tree = fd->findChild <QTreeView*>();
tree->setRootIsDecorated(true);
tree->setItemsExpandable(true);
fd->setFileMode(QFileDialog::Directory);
fd->setOption(QFileDialog::ShowDirsOnly);
fd->setViewMode(QFileDialog::Detail);
int result = fd->exec();
QString directory;
if (result)
{
directory = fd->selectedFiles()[0];
qDebug()<<directory;
}
Получил этот метод из здесь
Ответ 3
Попробуйте эту строку кода, она покажет вам диалог поиска папки:
ui->txtSaveAddress->setText(folderDlg.getExistingDirectory(0,"Caption",QString(),QFileDialog::ShowDirsOnly));
![enter image description here]()
Ответ 4
Это сработало для меня:
def getDir(self):
dialog = QtGui.QFileDialog()
dialog.setFileMode(QtGui.QFileDialog.Directory)
dialog.setOption(QtGui.QFileDialog.ShowDirsOnly)
directory = dialog.getExistingDirectory(self, 'Choose Directory', os.path.curdir)