Подтвердить что ты не робот

Диалог браузера папки в 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

4b9b3361

Ответ 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)