2017-01-30 47 views
2

QTableWidgetに表示されるアイテムのリストがあり、それぞれが特定のフォルダに対応しています。QTreeView/QFileSystemModelをクリアする方法

この次にQFreeSystemModelを持つQTreeViewがあります。 QTableWidgetから項目を選択すると、対応するフォルダの内容を表示するためにスロットが呼び出されます(下図参照)。

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(); 
     } 
    } 
} 

ディレクトリが存在しない場合は、何も表示しません。しかし、空のルートパスを設定したりビューをリセットしようとすると、すべてのコンピュータドライブが表示されます。

QTreeViewをリセットまたはクリアするにはどうすればよいですか?

+0

制御する空のディレクトリにルートパスを設定できますか? –

+0

それは私にこのポストを思い出させます:http://stackoverflow.com/questions/3212392/qtreeview-qfilesystemmodel-setrootpath-and-qsortfilterproxymodel-with-regexp-f – Mikitori

+0

@GeorgSchöllyルートディレクトリを空のディレクトリに設定すると機能しますが、より洗練されたソリューションを探しています... – Arnaud

答えて

3

同様の問題がありました。それはずっと前だったので、私はそれをどのように解決したのかかなり分かりません。 QTreeviewをモデルとしてnullptrを設定するとうまくいくと思います。 QDirは、あなたがそうでなければ、新たなQFileSystemModelを設定存在するので、ときに呼び出す:

tree->setModel(nullptr); 

ホープこれはあなたを助けます。

編集: これを行うと、ヘッダーも削除されます。

+0

ありがとう!あなたが言ったように、それはまた、ヘッダーを削除します... – Arnaud

関連する問題