当我想要填充此QList时,我遇到了QStandardItem的Qlist问题。 这是来自Qt Creator的错误消息:QList :: operator []中的ASSERT失败:“索引超出范围”
这是我的代码,但它是临时的,img会在每次迭代时改变。
for(int i=0;i<4;i++)
{
QList <QStandardItem*> itemCountryFlagTab;
QImage img =QImage(":/country/DataBase/country_flags/us.gif");
itemCountryFlagTab.reserve(5);
itemCountryFlagTab[i]->setData(QVariant(QPixmap::fromImage(img)), Qt::DecorationRole);
modelTraceRoute.setItem(i, 4, itemCountryFlagTab[i]);
}
答案 0 :(得分:2)
在使用之前,您不会初始化 itemCountryFlagTab ,因此您可以参考它没有的元素,这就是您的错误来源。此外,您在每次循环迭代期间从头开始创建 itemCountryFlagTab ,因此即使您初始化它,结果也会在每次循环迭代结束后丢失。
简而言之:除了初始化所提到的变量之外,你还应该在循环之外放置 itemCountryFlagTab 声明,如果你希望它在每次迭代后不被重置/消失。
reserve()函数不用于初始化变量 - 它只是为它们分配空间,以便QList的数据不需要一遍又一遍地重新分配,以防你知道多少元素将被附加到列表中。