Ich beabsichtige, ein eigenes Elementmodell zu erstellen, das von QAbstractItemModel abgeleitet ist. Das Modell enthält keine Daten, sondern ein Datenrepository. Dieses Repository gibt Signale aus, nachdem Elemente eingefügt, entfernt, umbenannt usw. wurden.So leiten Sie Signale in einem QAbstractItemModel-Wrappermodell weiter
Wenn sich etwas im Repository ändert, muss das Objektmodell diese Signale weiterleiten.
jedoch das Repository eigenständige Signale wie void itemRemoved(int index);
hat, während QAbstractItemModel beginnen hat/Endpaare von Schutzfunktionen (und Signalen) wie beginInsertRows()
und endInsertRows()
.
Wie soll ich damit umgehen? Z.B. Ich könnte einen Schlitz wie die folgenden zu dem itemRemoved()
Signal Repository verbinden:
void RepositoryItemRemoved(int i)
{
beginInsertRows(QModelIndex(), i, i);
endInsertRows();
}
auf dem obigen Beispiel Basierend: Ist es gültig beginInsertRows()
/endInsertRows()
sequently nach rufe eine Zeile im Repository eingesetzt wurde?
Haben Sie eine Vorstellung davon, welche Nebenwirkungen auftreten können, wenn Sie den vorgesehenen Verwendungszweck nicht einhalten? – Silicomancer
Um ehrlich zu sein, macht dieses Design für mich keinen Sinn. Ein einzelnes Signal nach dem Einfügen oder Entfernen der Daten sollte ausreichen, um die Aufgabe zu erledigen. Es ist vielleicht nur in einem Kontext mit mehreren Threads problematisch, aber dann würde ein einfacher Mutex den Trick machen. Ich könnte etwas vermissen, aber ich hatte viele Fälle, in denen Qt Internals suboptimal entworfen sind. – dtech