2010-10-15 21 views
46

Le « Rechercher un dossier » dialogue Windows est très pratique car:peut-on utiliser la boîte de dialogue Ouvrir un fichier pour sélectionner un dossier?

  • il n'a pas zone Chemin où je peux coller le chemin que je veux (par exemple de Total Commander)
  • il commence toujours à partir du bureau avec tout est fermé

Existe-t-il un moyen d'utiliser la boîte de dialogue "Ouvrir fichier" (qui est beaucoup mieux) pour sélectionner un dossier? Un drapeau ou une option ou quelque chose?

Contexte: le calibre eLibrary manager qui est écrit en Python et Qt.

Actuellement affiché comme sur la gauche. Je voudrais à afficher comme sur le droit BrowserFileDialog

ou mieux encore, comme la boîte de dialogue Ouvrir un fichier: OpenFileDialog

+0

Je déteste aussi que vous ne pouvez pas utiliser des raccourcis dans la boîte de dialogue « Rechercher un dossier ». Pourquoi ne le réparent-ils pas déjà ?! – cyco130

Répondre

19

Vous pouvez définir le mode de fichier dans QFileDialog-QFileDialog::Directory

voir http://qt-project.org/doc/qt-5.0/qtwidgets/qfiledialog.html#FileMode-enum

Vous pouvez également utiliser QFileDialog::setOption avec la valeur QFileDialog::ShowDirsOnly

+0

Le [code] (http://bazaar.launchpad.net/~kovid/calibre/trunk/annotate/head%3A/src/calibre/gui2/__init__.py#L518) utilise QFileDialog.getExistingDirectory (QFileDialog.Directory) , et cela affiche le dialogue "Browse For Folder" qui dérange. –

+0

Dois-je utiliser quelque chose comme ça? dialog = new QFileDialog(); dialog.setOption (QFileDialog.ShowDirsOnly, true); dialog.getOpenFileName (QFileDialog.Directory); –

+0

QFileDialog :: DirectoryOnly est obsolète depuis Qt 4.5: Essayez d'utiliser setOption() – Ranjith

56

Vous pouvez essayer celui-ci:

QString QFileDialog::getExistingDirectory (QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly) [static] 

Celui-ci est utilisé pour choisir un répertoire, et fera apparaître un dialogue comme vous le montrez enfin.

Démo:

QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), 
              "/home", 
              QFileDialog::ShowDirsOnly 
              | QFileDialog::DontResolveSymlinks);