Przygotowałem model QAbstractListModel
, którego indeksy modelu zawierają wskaźnik, który absolutnie potrzebowałem do przetwarzania danych. Dodam dane tak:Jak powiązać QModelIndex z nowym wierszem?
void PointListModel::addPoint(int frameNumber, QPoint const& pos)
{
PointItem *pointItem = new PointItem(frameNumber, pos);
QModelIndex newRow = this->createIndex(m_points.count(), 0, pointItem);
qDebug() << newRow.internalPointer();
beginInsertRows(newRow, m_points.count(), m_points.count());
m_points.insert(m_points.count(), pointItem);
endInsertRows();
emit pointAdded(pointItem, pos);
}
Dopiero później zdałem sobie sprawę, że argument beginInsertRows
prosi o modelu indeksu nowego wiersza, a nie rzeczywista Indeks Model nowy wiersz za rodzic.
W tym momencie Qt nie dało mi możliwości dostarczenia QModelIndex
do powiązania z tym konkretnym wierszem. Jak utworzyć własny indeks modelu dla tego nowego wiersza?
To wygląda to coraz bliżej do tego, co chcę, ale z tego co rozumiem, Funkcja index() nie jest wywoływana wyłącznie w celu tworzenia nowych wierszy Jak rozróżnić wywołanie index() między nowy wiersz a istniejący? Mam QMap przechowuje moje dane, ale klucz QMap nie idzie numer wiersza w danym momencie: –
@nessup, domyślna implementacja QAbstractListModel :: index() zawsze wywołuje funkcję createIndex() dla wszelkich poprawnych współrzędnych, więc domyślam się, że powinna ona utworzyć nowy indeks dla każdego połączenia, chociaż wydaje mi się to również dziwne .M operacja tworzenia indeksu aybe jest uważana za niedrogą, więc można utworzyć wiele zduplikowanych indeksów. W końcu twoja implementacja będzie taka sama jak domyślna, z tą różnicą, że przekażesz coś znaczącego jako wskaźnik danych do createIndex() zamiast NULL (jak to robi domyślna implementacja). –
Dobra, dziękuję. Zamierzam spróbować zachować QMap w moim kodzie i zwrócić nowy QModelIndex, jeśli QMap nie zawiera odpowiedniego QModelIndex w danym wierszu. Wrócę do ciebie, jak to działa. –