Unsolved QModelIndex selection causes application crash
-
Hello everybody,
I've a strange crashe with QModelIndex. In fact all comments are written into log file but application crashes.
frmPatient *w = new frmPatient(this,0); if(w->exec()) { int patient = w->currentPatient(); WriteIntoLogFile(QString("création du patient n° %1").arg(patient)); if(patient != 0) { WriteIntoLogFile("raffraichissmeent liste patient"); showPatients(""); WriteIntoLogFile(QString("sélection du patient n° %1 dans la liste").arg(QString::number(patient))); QAbstractItemModel* model = tabPatient->model(); if (model == 0) WriteIntoLogFile("echec sélection du modèle depuis la liste des patients"); QModelIndex start(model->index(0,0,QModelIndex())); if (!start.isValid()) WriteIntoLogFile("echec sélection modèle index dans la liste"); QModelIndexList list = model->match(start, Qt::DisplayRole, patient); if (list.isEmpty()) WriteIntoLogFile(QString("sélection du patient n° %1 dans la liste").arg(QString::number(patient))); if(!list.isEmpty()) { WriteIntoLogFile("sélection de l'élement dans la liste"); tabPatient->setCurrentIndex(list[0]); WriteIntoLogFile("CurrentIndex sélectionné"); tabPatient->scrollTo(model->index(list[0].row(), 1)); WriteIntoLogFile("scrollTo l'élement"); // this comment is written into log file and application crashes } else WriteIntoLogFile("l'élement à selectionner est vide"); } } WriteIntoLogFile("suppression objet"); delete w;
I'm on Qt4.8 and the crashes happens only Windows 10 x64.
Can anyone tell me what's wrong ?
Many thanks in advance.
Regards. -
Hi
if you single step, what line does it crash in?One note though
you create (dialog`) frmPatient(this,0); with parent as "this"
but you delete it later yourself. So parent might also try to delete it
on closing. -
Hi,
To add to @mrjj, you are testing if
model
is equal zero, if so you write some log and then go on using it, that will surely crash. You should stop there.By the way, there's no need for
frmPatnient
to be allocated on the heap since you destroy it at the end anyway. Just allocate it on the stack.