0

当我想填写此 QList 时,我遇到了 QStandardItems 的 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]);
    }
4

1 回答 1

2

您没有在使用itemCountryFlagTab之前对其进行初始化,因此您引用了它没有的元素,这就是您的错误的根源。此外,您在每次循环迭代期间从头开始创建itemCountryFlagTab,因此即使您对其进行了初始化,结果也会在每次循环迭代结束后丢失。

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

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

于 2014-06-09T03:54:06.833 回答