Ho preparato uno QAbstractListModel
i cui indici modello contengono un puntatore assolutamente necessario per elaborare i dati. Aggiungo i dati in questo modo:Come associare QModelIndex a una nuova riga?
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);
}
Fu solo più tardi che mi sono reso conto che l'argomento a beginInsertRows
sta chiedendo per l'indice del modello genitore della nuova riga, non indice di modello reale della nuova riga.
Quindi, in questo momento, Qt non mi ha dato modo di fornire un QModelIndex
da associare a questa particolare riga. Come creo il mio indice di modello per questa nuova riga?
Questo appare come la cosa si fa più vicino a quello che voglio, ma da quanto ho capito, il la funzione index() non è chiamata esclusivamente per la creazione di nuove righe Come faccio a distinguere tra una chiamata index() tra una nuova riga e una esistente? Ho una QMap che memorizza i miei dati, ma la chiave QMap non sta andando per numero di riga al momento. –
@nessup, l'implementazione QAbstractListModel :: index() predefinita chiama sempre createIndex() per qualsiasi coordinata valida, quindi suppongo che si supponga di creare un nuovo indice per ogni chiamata, anche se mi sembra strano anche a me .M tuttavia, l'operazione di creazione dell'indice è considerata poco costosa, quindi è perfettamente corretto creare più indici duplicati. Dopo tutto, l'implementazione sarà la stessa di quella predefinita con l'unica differenza che si passa qualcosa di significativo come il puntatore dati a createIndex() invece di NULL (come l'implementazione predefinita). –
Ok, grazie. Sto tentando di mantenere QMap nel mio codice e restituire un nuovo QModelIndex se QMap non contiene il QModelIndex appropriato in una determinata riga. Ti risponderò su come va. –