2014-06-09 9 views
0

이 QList를 채울 때 QStandardItems의 Qlist에 문제가 있습니다. 이것은 Qt Creator의 오류 메시지입니다. QList :: operator []의 ASSERT 오류 : "인덱스가 범위를 벗어났습니다."QStandardItem 문제

이것은 내 코드이지만 임시적으로 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

오류가 발생한 행 (디버거 내부의 스택 추적 참조)은 무엇입니까? –

+0

itemCountryFlagTab [i] -> setData (QVariant (QPixmap :: fromImage (img)), Qt :: DecorationRole); –

+1

QStandardItem을 사용하기 전에 먼저 작성하는 것이 좋습니다. 죄송하지만이 코드는 정말 이상하고 잘못되었습니다. 그리고 그런데'reserve '는 포인터 배열의 내부 버퍼에만 영향을 미치므로 외부에서 ('reserve'를 호출 한 후 컨테이너의 크기를 확인하는 것이 아니라) 여기에 기대하는대로 작동하지 않습니다. – OnWhenReady

답변

2

당신은 그것을 사용하기 전에 itemCountryFlagTab를 초기화하지 않으며, 따라서 당신은 가지고 있지 않은 요소를 참조하고이 오류의 근원이다. 또한 각 루프 반복 중에 itemCountryFlagTab을 처음부터 만들므로 초기화하더라도 각 루프 반복이 끝나면 결과가 손실됩니다.

간단히 말해서 : 위에서 언급 한 변수를 초기화하는 것 이외에도 반복 할 때마다 재설정/사라지지 않기를 원하면 itemCountryFlagTab 루프를 선언 외부에 넣어야합니다.

예비() 기능이 변수를 초기화하는 데 사용되지 않습니다 - QList의 데이터를 통해 재 할당하고 다시 경우에 당신이가는 얼마나 많은 요소 알아야 할 필요가없는 것이다 그래야 그냥 그들을위한 공간을 할당 목록에 추가하십시오.