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