2017-01-30 91 views
2

我有一個QTableWidget中顯示的項目列表,每個項目對應一個特定的文件夾。如何清除QTreeView/QFileSystemModel

除此之外,我有一個QTreeView,與QFileSystemModel。當我從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