2012-11-08 12 views
13

Gibt es eine Möglichkeit, einen Ordner-Browser-Dialog in Qt zu öffnen? Wenn ich QFileDialog mit Directory Datei-Modus, auch wenn ich die Option ShowDirsOnly angeben, bekomme ich die Standard-Datei-Dialog. Ich würde es vorziehen, ein Dialogfeld zu verwenden, das den Benutzer auffordert, ein Verzeichnis aus einer Verzeichnisstruktur auszuwählen.Ordner-Browser-Dialog in Qt

Hier ist der pyside Code Ich verwende:

from PySide import QtGui 
app = QtGui.QApplication([]) 
dialog = QtGui.QFileDialog() 
dialog.setFileMode(QtGui.QFileDialog.Directory) 
dialog.setOption(QtGui.QFileDialog.ShowDirsOnly) 
dialog.exec_() 

Und hier ist das Ergebnis, das ich unter Windows erhalten 7: File selection dialog

Antwort

10

Es scheint, dass die Reihenfolge, in der Sie nennen setFileMode() und setOption() Angelegenheiten. Stellen Sie sicher, Sie anrufen setFileMode() zuerst:

QFileDialog dialog; 
dialog.setFileMode(QFileDialog::Directory); 
dialog.setOption(QFileDialog::ShowDirsOnly); 
... 
+0

Vielen Dank für die schnelle Antwort! Leider ist das die Reihenfolge, in der ich es mache. Ich habe meine Frage bearbeitet, um das Code-Snippet, den Screenshot und das Betriebssystem, auf dem ich teste, einzubinden. Es wäre toll, wenn jemand darauf hinweisen könnte, was ich falsch mache. Und wenn ich nichts falsch mache, ist es schön zu wissen, dass es an so einem Faktor liegt;) –

+0

Ah, ich sehe, was du jetzt versuchst zu tun. Es ist nicht möglich, genau das zu bekommen, wonach Sie suchen, da ich denke, dass es sich um einen Windows-spezifischen Dialogstil handelt und QFileDialog versucht, für alle Plattformen generisch zu sein. – Chris

+0

Ich hatte Angst, dass das der Fall wäre, aber ich hoffte, dass jemand darauf hinweisen würde, dass ich etwas falsch gemacht habe;) Danke! –

5

Ich weiß, dass meine Antwort etwas heikel ist und sieht aus wie kleine Hack, aber die QFileDialog statischen Methoden wie getExistingDirectory() verwenden die native Dialog, so dass nur begrenzte Anpassung möglich ist.

Wenn Sie jedoch eine QFileDialog Instanz erstellen, erhalten Sie einen Dialog, der angepasst werden kann - solange Sie mit einem Live-Dialog glücklich sind.

Zum Beispiel dies eine Baumansicht mit erweiterbaren Verzeichnisse zeigen sollte, dass Sie auswählen (Hoffnung, muss es diesen Code auf pyside kein Problem Port sein):

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; 
} 

erhielt diese Methode von here

2

diese Codezeile Versuchen Sie, es Sie einen Ordner durchsuchen Dialog zeigen:

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

enter image description here

2

Das ist für mich gearbeitet:

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)