Model dizinlerinde verileri işlemek için kesinlikle ihtiyaç duyduğum bir işaretçi içeren bir QAbstractListModel
hazırladım. Öyle gibi verileri ekleyin:QModelIndex yeni bir sırayla nasıl ilişkilendirilir?
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);
}
Sadece sonra ben beginInsertRows
argüman yeni satıra değil, yeni satırın gerçek model endeksi arasında ebeveyn modeli endeksi istiyor fark olmasıydı. Bu noktada, bu noktada, bu özel satırla ilişkilendirmek için bana QModelIndex
tedarik etmenin bir yolunu vermedim. Bu yeni satır için kendi model dizinimi nasıl oluşturabilirim?
ama anladığım kadarıyla, index() işlevi sadece yeni satırların oluşturulması için çağrılmaz. Yeni bir satır ile var olan arasındaki dizin() çağrısını nasıl ayırt edebilirim? Verilerimi depolayan bir QMap var, ancak QMap anahtarı gitmiyor Şu anda satır numarasına göre –
@nessup, varsayılan QAbstractListModel :: index() uygulaması her zaman geçerli koordinatlar için createIndex() öğesini çağırır, bu yüzden her çağrı için yeni bir dizin oluşturması gerekiyor sanırım, bu bana da garip gelse de M aybe dizin oluşturma işlemi ucuz olarak kabul edilir, bu yüzden birden fazla çift dizin oluşturmak için mükemmeldir. Ne de olsa, uygulamanızın varsayılan değeriyle aynı olacaktır, tek fark, veri işaretçisi olarak NULL yerine createIndex() için anlamlı bir şey iletmenizdir (varsayılan uygulamada olduğu gibi). –
Tamam, teşekkürler. Kodumda bir QMap tutmaya ve QMap belirli bir satırda uygun QModelIndex içermiyorsa yeni bir QModelIndex döndürmeye çalışacağım. Nasıl geçtiği konusunda size geri döneceğim. –