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で得た結果です:
setFileMode()
とsetOption()
を呼び出す順序が重要であるようです。最初にsetFileMode()
を呼び出していることを確認してください。
QFileDialog dialog;
dialog.setFileMode(QFileDialog::Directory);
dialog.setOption(QFileDialog::ShowDirsOnly);
...
私の答えはトリッキーで少しハックのように見えますが、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;
}
ここ からそのメソッドを取得しました
このコード行を試してみてください。フォルダ参照ダイアログが表示されます。
ui->txtSaveAddress->setText(folderDlg.getExistingDirectory(0,"Caption",QString(),QFileDialog::ShowDirsOnly));
これは私のために働いた:
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)