web-dev-qa-db-ja.com

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_()

そして、これが私がWindows7で得た結果です: File selection dialog

13

setFileMode()setOption()を呼び出す順序が重要であるようです。最初にsetFileMode()を呼び出していることを確認してください。

QFileDialog dialog;
dialog.setFileMode(QFileDialog::Directory);
dialog.setOption(QFileDialog::ShowDirsOnly);
...
10
Chris

私の答えはトリッキーで少しハックのように見えますが、getExistingDirectory()のようなQFileDialog静的メソッドはネイティブダイアログを使用するため、限られたカスタマイズしかできません。

ただし、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;
}

ここ からそのメソッドを取得しました

5
troyane

このコード行を試してみてください。フォルダ参照ダイアログが表示されます。

 ui->txtSaveAddress->setText(folderDlg.getExistingDirectory(0,"Caption",QString(),QFileDialog::ShowDirsOnly));

enter image description here

3
mesut

これは私のために働いた:

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)
3
ForeverWintr