2012-09-24 5 views
1

J'ai le code suivant dans lequel je veux vérifier s'il existe des sous-répertoires. Je m'attends à ce que canFetchMore() fn renvoie true (puisque le répertoire racine contient des sous-répertoires). Mais ça revient faux. Y at-il un autre fn à appeler avant d'appeler canFetchMore() fn.QFileSystemModel :: canFetchMore() renvoie false toujours

QFileSystemModel model; 
model.setFilter(QDir::AllDirs); 
model.setRootPath("/"); 
QModelIndex index = model.index(model.rootPath()); 
qDebug()<<index.child(0,0).isValid()<<model.canFetchMore(index)<<index; 

J'ai essayé d'utiliser hasChildren() fn et il retourne toujours vrai quel que soit le dossier contient des sous-répertoires ou non.

Répondre

1

Bizarre, il n'y a pas de documentation pour cela. La méthode

model.setRootPath("/"); 

appeler automatiquement model.fetchMore(index);. Ce qui signifie qu'à ce stade tous les sous-répertoires sont déjà trouvés. C'est pourquoi votre appel model.canFetchMore(index) renvoie false, car il n'y a plus de sous-répertoires à récupérer.

Une façon de le faire (en utilisant QDir, QFileInfo):

QDir mytopdir("/path/to/dir"); 
if(mytopdir.exists()){ 
    QFileInfoList list = mytopdir.entryInfoList(); 
    foreach(QFileInfo fileInfo, list){ 
     if(fileInfo.isDir()){ 
      //FOUND IT!! 
     } 
    } 
} 
+0

Merci. Mais comment trouver si un répertoire a des sous-répertoires ou non –

+0

@Talespin_Kit voir ma réponse éditée. – UmNyobe

+0

". Et .." seront considérés comme des répertoires par QDir. Pour l'arrêter nous devrions appeler QDir :: setFilter (QDir :: AllDirs | QDir :: NoDotAndDotDot); qui fonctionne aussi sur des répertoires vides. –

Questions connexes