QStandardItem问题

时间:2014-06-09 00:36:18

标签: c++ qt qstandarditem

当我想要填充此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]);
    }

1 个答案:

答案 0 :(得分:2)

在使用之前,您不会初始化 itemCountryFlagTab ,因此您可以参考它没有的元素,这就是您的错误来源。此外,您在每次循环迭代期间从头开始创建 itemCountryFlagTab ,因此即使您初始化它,结果也会在每次循环迭代结束后丢失。

简而言之:除了初始化所提到的变量之外,你还应该在循环之外放置 itemCountryFlagTab 声明,如果你希望它在每次迭代后不被重置/消失。

reserve()函数不用于初始化变量 - 它只是为它们分配空间,以便QList的数据不需要一遍又一遍地重新分配,以防你知道多少元素将被附加到列表中。