ich hab mal wieder ein Problem mit den Model&View Zeugs...
es geht um ein Model das durch ein QTreeView, ein QListView und ein selbst geschriebenes View veranschaulicht wird.
Insgesamt entsteht eine Ansicht wie man sie vom WindowsExplorer (oder besserem) gewöhnt ist, nur dass es eben nicht die Ansicht auf Dateien und Ordner, sondern auf eine eigene Datenstruktur darstellt. (Mit Boxen (~Ordnern) und Items (~Dateien))
Soweit tut alles wunderbar, ansehen der Daten, einfügen von neuen Daten, bearbeiten der Daten, context Menüs je nachdem worauf geklickt wurde, usw alles super... nur eins macht einfach dauerhaft Probleme... das entfernen von Daten...
Es soll schlich und ergreifend eine Box gelöscht werden.
Der Code dafür ist:
Code: Alles auswählen
class C_HierachyModel ...
{
...
C_DataItem *mp_rootItem;
// Die Folgende Funktion wird korrekt aufgrufen, die Indexes stimmen
bool C_HierachyModel::Delete ( const QModelIndexList &fl_indeces )
{
/* Nachfragen ob wirklich löschen usw */
foreach ( QModelIndex index, fl_indeces )
{
if ( !index.isValid ( ) )
continue;
removeRow ( index.row ( ), index.parent ( ) );
}
}
bool C_HierachyModel::removeRows ( int f_row, int f_count, const QModelIndex &f_parent )
{
C_DataItem * p_parentItem ( NULL );
QList < C_DataItem* > lp_dataItems;
if ( f_parent.isValid ( ) )
p_parentItem = static_cast < C_DataItem* > ( f_parent.internalPointer ( ) );
else
p_parentItem = mp_rootItem;
beginRemoveRows ( f_parent, f_row, f_row + f_count - 1 );
for ( int rowCounter ( f_row ); rowCounter < f_row + f_count; ++rowCounter )
p_parentItem->Child ( rowCounter )->DeleteObject ( );
endRemoveRows ( );
return true;
}
Es funktioniert alles bis direkt nach "endRemoveRows ( )", dann wird ein Fehler angezeigt, weil von dem QModelIndex, das im Moment gelöscht wurde, der Parent abgefragt wird. Das verursacht natürlich einen Fehler, da die Datenstrukturen dafür bereits gelöscht wurden... einer ne Idee was falsch ist?
thx
Elgrimm Esleborn