2011-08-14 68 views
2

刪除所有行和子行,我不知道爲什麼我有麻煩從QTreeView則如何從QTreeView則

我使用QStandardItemModel作爲模型中刪除所有行和子行。現在這裏是我的代碼不起作用。

可能是什麼問題?

QModelIndex FirstQModelIndex; 
QModelIndex parentQModelIndex; 
int iMdlChidCound = m_model->hasChildren(); 
if(iMdlChidCound > 0) 
{ 
    // only if there at list 1 row in the view 
    FirstQModelIndex = m_model->item(0,0)->index(); 
    QStandardItem* feedItem = m_model->itemFromIndex(FirstQModelIndex); 
    // get the parent of the first row its the header row 
    QStandardItem* parentItem = feedItem->parent(); 


    // here im getting exception 
    int parent_rows= parentItem->hasChildren(); 
    parentQModelIndex = m_model->indexFromItem(parentItem); 


    // now i like to delete all the rows under the header , and its dosnt work 
    if(parent_rows>0) 
    { 
     bool b = feedItem->model()->removeRows(0,y,parentQModelIndex); 
    } 
} 

回答

8

看來你所做的很多事情都是多餘的。如果您唯一的目標是從模型中刪除所有行,則可能只需使用QStandardItemModel::clear

在您的代碼中,您將以不需要的方式在模型和項目之間跳躍。

if(m_model->hasChildren()) { 
    m_model->removeRows(0, m_model->rowCount()); 
} 

這應該做你想要的。

+0

另外,對於頂級項目父項爲空,因此您會收到您的異常。 – Raiv

1

QStandardItemModel ::明確()

它清除所有的項目,包括標題行。