我在QStandardItemModel
上遇到了一些問題。 我想要做的是將一個列表添加到我的模型中,當列表更新時,我將新列表傳遞給參數,清除舊模型並添加新列表。 這聽起來很簡單,但我遇到了一個我無法弄清楚的錯誤。當我將第一個列表添加到模型中時沒有問題,但是當我添加第二個列表時,第一個列表成功刪除(我可以在控制檯中看到),但是應用程序崩潰。如何從QStandardItemModel中刪除所有項目
這裏是我的代碼:
void MyModel::updateList(QList<QStandardItem*> list)
{
// Delete current model
int rows = rowCount();
for (int i = 0 ; i < rows ; i++)
{
if(item(0)->hasChildren())
{
int children = item(0)->rowCount();
for (int j = 0 ; j < children ; j++)
{
QString name = item(0)->child(0)->accessibleText();
qDebug()<<(name + QLatin1String("\tremoved"));
item(0)->removeRow(0);
}
}
QString itemRemoved = item(0)->accessibleText();
qDebug()<<(itemRemoved + QLatin1String("\tremoved"));
removeRow(0);
}
// Add new list to model
for(int j=0 ; j<list.count() ; j++)
{
appendRow(list[j]);
qDebug()<< (list[j]->accessibleText() + tr(" ADDED"));
}
printf("List UPDATED \n");
}
顯然我已經使用方法clear();
,而不是通過行刪除行嘗試,但它具有相同的效果。
我不明白爲什麼這段代碼不起作用。
如果有人能夠對此事發表一些看法,我會非常感激。
到底在哪(以怎樣的消息)它會崩潰?另外,你應該避免在C++中使用C風格的輸出('printf');) – SingerOfTheFall
沒有消息,它只是在for循環中的第一個'appendRow()'處崩潰,它添加了新列表。我實際上通過在前面和後面放置一個'printf'並意識到只有第一個被打印到控制檯上發現了這一點。 – Simpsons
項目層次結構的外觀如何?您刪除子項目,但僅添加頂級項目。 – vahancho