2012-11-08 7 views
13

C'è un modo per aprire una finestra di dialogo del browser delle cartelle in Qt? Quando uso QFileDialog con la modalità file Directory, anche se si specifica l'opzione ShowDirsOnly, ottengo la finestra di dialogo standard dei file. Preferirei usare una finestra di dialogo che chiede all'utente di scegliere una directory da un albero di directory.Finestra di dialogo del browser delle cartelle in Qt

Ecco il codice PySide sto usando:

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

Ed ecco il risultato che ottengo su Windows 7: File selection dialog

risposta

10

Sembra che l'ordine in cui si chiama setFileMode() e setOption() questioni. Assicurarsi che si sta chiamando setFileMode() prima:

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

Grazie per la rapida risposta! Sfortunatamente, questo è l'ordine in cui lo sto facendo. Ho modificato la mia domanda per includere lo snippet di codice, lo screenshot e il sistema operativo su cui sto eseguendo il test. Sarebbe bello se qualcuno potesse indicare cosa sto facendo male. E se non sto facendo qualcosa di sbagliato, è bello sapere che è a causa di tale fattore;) –

+0

Ah vedo cosa stai cercando di fare ora. Non è possibile ottenere esattamente quello che stai cercando, perché penso che sia uno stile di dialogo in qualche modo specifico per Windows e QFileDialog sta cercando di essere generico per tutte le piattaforme. – Chris

+0

Avevo paura che fosse il caso, ma speravo che qualcuno avrebbe indicato qualcosa che ho fatto di sbagliato, invece;) Grazie! –

5

Lo so, la mia risposta è un po 'complicato e si presenta come piccolo hack, ma i QFileDialog metodi statici come getExistingDirectory() utilizzare la finestra di dialogo nativa, in modo che solo la personalizzazione limitata è possibile.

Tuttavia, se si crea un'istanza QFileDialog, si ottiene una finestra di dialogo che può essere personalizzata su , a patto che si disponga di una finestra di dialogo in tempo reale.

Ad esempio, questo dovrebbe mostrare una vista ad albero con le directory espandibili che è possibile selezionare (speranza, non deve essere un porto problema questo codice a 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; 
} 

Got che il metodo da here

2

Prova questa riga di codice, che vi mostrerà una finestra della cartella Sfoglia:

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

enter image description here

2

Questo ha funzionato per me:

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) 
Problemi correlati