如何从QStandardItemModel中删除所有项目
How do I delete all items from a 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();
,而不是逐行删除,但结果相同。
我不明白为什么这个代码不起作用。
如果有人能澄清这件事,我将不胜感激。
以下代码在PyQt中,但它与您需要的非常相似:
model.removeRows( 0, model.rowCount() )
问题来自于我将输入列表中的项目直接添加到新列表中。由于输入列表是在不同的类中创建的,其中项目的父级是不同的,当试图从新列表中删除它们时,应用程序崩溃。
我通过从新项目创建新列表并只使用旧列表的text()
来解决问题:
void MyModel::updateList(QList<QStandardItem*> list)
{
clear();
for(int i=0 ; i<list.count() ; i++)
{
QStandardItem *l_item = new QStandardItem(list[i]->text());
l_item->setEditable(false);
l_item->setCheckable(true);
appendRow(l_item);
for (int j = 0 ; j<list[i]->rowCount() ; j++)
{
QStandardItem *l_subItem = new QStandardItem(list[i]->child(j)->text());
l_subItem->setEditable(false);
l_subItem->setCheckable(true);
l_item->appendRow(l_subItem);
}
}
}
这意味着我必须遍历输入列表中的子项列表,正如前面的一条评论中所指出的,因为通过创建新项,我需要重新添加它们。
感谢所有的帮助
相关文章:
- 从链接列表c++中删除一个项目
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 如何自动获取我的项目的路径并删除一些文件
- 如何从 CLion 的运行窗口中删除程序项目路径
- 类(可能是代理)的命名,允许在不修改基础容器的情况下对项目进行排序和删除
- C++ 从链表中删除项目时出现问题
- 仅从无序集合中删除一个项目
- Visual studio安装项目删除以前的版本
- 如何使用擦除和迭代器来删除二维向量中的项目
- 从 std::vector 中删除项目时"Iterator not incrementable"
- C++ priority_queue与自定义比较器并删除任何项目
- 从 QTreeView 中删除项目时取消选择所有行
- 如果为空,则从 QListWidget 中删除可编辑项目
- 从传递给新线程C++的矢量中删除项目
- C++ 链表删除了错误的项目
- 删除并清除组合框 Win32 API 中的所有项目
- 删除 iOS 项目中的 SDLKey 引用
- 如何将项目属性设置为删除警告MSB8004:中间目录不会以落后的斜线结束
- 如何创建一个函数,该函数可以从一个qtreewidget中删除项目并将其添加到另一个函数
- 在拖放 QML 列表中插入/删除项目使用 cpp 模型查看