2017-01-30 3 views
2

J'ai une liste d'éléments affichés dans un QTableWidget, chacun correspondant à un dossier spécifique.Comment effacer un QTreeView/QFileSystemModel

À côté de cela, j'ai un QTreeView, avec un QFileSystemModel. Lorsque je sélectionne un élément de QTableWidget, il appelle un emplacement (illustré ci-dessous) afin d'afficher le contenu du dossier correspondant.

void MyWidget::diplayFolder(int row) 
{ 
    if (auto item = table->item(row, 1)) 
    { 
     QString correspondingDirectory = item->text(); 
     if (QDir(correspondingDirectory).exists()) 
     { 
      // treeModel => QFileSystemModel 
      // tree  => QTreeView 
      treeModel->setRootPath(""); 
      treeModel->setRootPath(correspondingDirectory); 
      tree->setRootIndex(treeModel->index(correspondingDirectory)); 
     } 
     else 
     { 
      qDebug() << "Reset tree => do not display anything!"; 
      // treeModel->setRootPath(""); 
      // tree->reset(); 
     } 
    } 
} 

Si le répertoire n'existe pas, je ne veux rien afficher. Cependant, lorsque j'essaie de définir un chemin racine vide ou de réinitialiser la vue, tous les disques de mon ordinateur sont affichés. Comment réinitialiser ou effacer le QTreeView?

Comment réinitialiser ou effacer QTreeView?

+0

Pourriez-vous définir le chemin d'accès racine à un répertoire vide que vous contrôlez? –

+0

Il me rappelle ce post: http://stackoverflow.com/questions/3212392/qtreeview-qfilesystemmodel-setrootpath-et-qsortfilterproxymodel-with-regexp-f – Mikitori

+0

@ GeorgSchölly Définir le chemin racine à un répertoire vide fonctionne, mais j'étais à la recherche d'une solution plus propre ... – Arnaud

Répondre

3

Problème similaire. Je ne sais pas très bien comment je l'ai résolu, car c'était il y a longtemps. Je pense que cela devrait fonctionner si vous définissez Qtreeview un nullptr comme modèle. Ainsi, quand le QDir existe vous définissez un nouveau QFileSystemModel sinon vous appelez:

tree->setModel(nullptr); 

Espérons que cela vous aide.

EDIT: Si vous le faites de cette façon, l'en-tête est également supprimé.

+0

Merci! Et comme vous l'avez dit, il supprime également l'en-tête ... – Arnaud