2010-07-20 23 views
2

Je voudrais créer une boîte de dialogue similaire à QFileDialog::getExistingDirectory() pour laquelle le bouton OK seulement est activé lorsque le répertoire sélectionné contient certains fichiers.QFileDialog pour les répertoires ayant un certain contenu

Je sais que je ne peux pas réaliser cela avec QFileDialog, à la place je devrais trouver mon propre QDialog qui a un QTreeView couplé à un QFileSystemModel.

  1. Comment puis-je limiter le QTreeView aux répertoires?
  2. Comment puis-je obtenir le répertoire actuellement sélectionné afin que je puisse vérifier s'il contient certains noms de fichiers?
+0

Avez ma réponse non travailler pour vous? – Casey

+0

travaille encore sur la mise en œuvre, désolé pour le retard ... – fawick

Répondre

3
  1. Utilisez setFilter sur le QFileSystemModel soit avec les QDIR :: AllDirs QDIR :: l'option Dirs, probablement l'ancien.
  2. connectez le signal activated(QModelIndex) de l'arborescence à un de vos emplacements personnalisés. Dans cette fente passer le QModelIndex à la méthode Fileinfo/filePath du modèle, pour récupérer les informations/chemin du répertoire sélectionné, puis effectuez votre chèque

est un exemple:

void slotDirectorySelected(const QModelIndex & index) 
{ 
    QFileInfo info = fileSystemModel->fileInfo(index); 
    QDir selectedDir = info.dir(); 
    foreach(const QString entry, selectedDir.entryList()) { 
     // do something with the entry 
    } 
} 
+0

Merci, ça fonctionne! J'ai décidé d'enrouler le QFileSystemModel avec un QSotFilterProxyModel sous-classé pour pouvoir trier et n'afficher aucune colonne à côté du nom des répertoires dans le QTreeView – fawick