QList<T>::at: "index out of range" Problem
Verfasst: 19. Juli 2012 11:23
Tach zusammen,
Leider sehe ich momentan den Wald vor lauter Bäumen nicht. Folgendes Problem:
Ich habe ein ListWidget, dass beim Doppelklick den folgenden Slot aufruft.
Wenn man die Messagebox bestätigt wird diese Methode aufgerufen:
Und nun wird das Signal newEntry() ausgelöst was mich zu folgendem Slot bringt:
Endlch wird nun die Methode fillBKDLists() aufgerufen die mir einfach die listenaktualisiert und mein Widget updatet:
request Update erspar ich euch
, der Slot macht nix weiter als das ListWidget zu aktualisieren.
Nun bekomme ich bei einem Doppelklick, meine MessageBox, und beim Klick auf "Yes" stürzt das Programm mit folgender Fehlermeldung ab:
Warum? Ich verstehe nicht warum die Zeile der MessageBox zweimal ausgeführt wird. beim ersten Durchlauf, also nach dem Doppelklick funktioniert der Slot und springt richtig zu changeStatus...
Erst nachdem die Funktionen wieder verlassen werden, bekomme ich den Error und Absturz, dabei begreife ich nicht warum er den SLot komplett zweimal aufruft.
Ich hoffe ich konnte mein Problem gut darstellen und freue mich auf Antworten.
Vlg Strige
Leider sehe ich momentan den Wald vor lauter Bäumen nicht. Folgendes Problem:
Ich habe ein ListWidget, dass beim Doppelklick den folgenden Slot aufruft.
Code: Alles auswählen
void inWidget::doubleOnUnBkd(QModelIndex index)
{
int in = index.row();
int ret = QMessageBox::question(this,"Bestätigen", QString("Möchten Sie %1 buchen?")
.arg(fData->getUnbooked(financeData::INCOME).at(in).title),
QMessageBox::Yes, QMessageBox::No);
if (ret == QMessageBox::Yes)
fData->changeStatus(in, financeData::INCOME);
}
Code: Alles auswählen
void financeData::changeStatus(int row, int b)
{
qDebug() << row;
payment data;
if (b == INCOME){
data = inunbooked.at(row);
inunbooked.removeAt(row);
for (int i = 0; i< income.length(); i++){
if(income.at(i) == data){
data.checked = true;
income.replace(i, data);
}
}
}
emit newEntry();
}Code: Alles auswählen
void financeData::saveData()
{
QFile file("data.fda");
if(!file.open(QIODevice::WriteOnly)){
QMessageBox::warning(NULL,"Fehler beim Schreiben", file.errorString());
return;
}
QDataStream s(&file);
s << this;
file.close();
fillBkdLists();
}Code: Alles auswählen
void financeData::fillBkdLists()
{
inunbooked.clear();
inbooked.clear();
outunbooked.clear();
outbooked.clear();
for(int i =0; i<income.length(); i++){
if(income.at(i).checked == false)
inunbooked << income.at(i);
if(income.at(i).checked == true)
inbooked << income.at(i);
}
for(int i = 0; i<outcome.length(); i++){
if(outcome.at(i).checked == false)
outunbooked << outcome.at(i);
if(outcome.at(i).checked == true)
outbooked << outcome.at(i);
}
emit requestUpdate();
}Nun bekomme ich bei einem Doppelklick, meine MessageBox, und beim Klick auf "Yes" stürzt das Programm mit folgender Fehlermeldung ab:
Nach ewig langem Debuggen habe ich endlich herausgefunden das dies von der Methode inWidget::doubleOnUnBkd ausgelöst wird und zwar von:ASSERT failure in QList<T>::at: "index out of range", file /usr/include/QtCore/qlist.h, line 456
Das Programm ist abgestürzt.
Code: Alles auswählen
int ret = QMessageBox::question(this,"Bestätigen", QString("Möchten Sie %1 buchen?")
.arg(fData->getUnbooked(financeData::INCOME).at(in).title),
QMessageBox::Yes, QMessageBox::No);Erst nachdem die Funktionen wieder verlassen werden, bekomme ich den Error und Absturz, dabei begreife ich nicht warum er den SLot komplett zweimal aufruft.
Ich hoffe ich konnte mein Problem gut darstellen und freue mich auf Antworten.
Vlg Strige