Tôi đã nấu một số QAbstractListModel
có chỉ mục mô hình chứa một con trỏ mà tôi hoàn toàn cần để xử lý dữ liệu. Tôi thêm các dữ liệu như vậy:Làm cách nào để liên kết QModelIndex với hàng mới?
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);
}
Đó là chỉ sau đó tôi nhận ra rằng lập luận để beginInsertRows
được yêu cầu chỉ số mô hình mẹ của hàng mới, không phải là hàng mới của mô hình chỉ số thực tế.
Vì vậy, tại thời điểm này, Qt đã không cung cấp cho tôi cách cung cấp QModelIndex
để liên kết với hàng cụ thể này. Làm cách nào để tạo chỉ mục mô hình của riêng tôi cho hàng mới này?
này trông giống như nó đang trở nên gần gũi hơn với những gì tôi muốn, nhưng từ những gì tôi hiểu, Hàm index() không chỉ được gọi để tạo các hàng mới.Làm thế nào để phân biệt giữa một cuộc gọi index() giữa một hàng mới và một hàng tồn tại? Tôi có một QMap lưu trữ dữ liệu của tôi, nhưng phím QMap sẽ không Theo số hàng tại thời điểm –
@nessup, việc thực hiện chỉ mục QAbstractListModel :: index() mặc định luôn gọi createIndex() cho bất kỳ tọa độ hợp lệ nào, vì vậy tôi đoán nó sẽ tạo chỉ mục mới cho mỗi cuộc gọi, mặc dù nó có vẻ lạ với tôi . M hoạt động tạo chỉ mục aybe được coi là rẻ tiền vì vậy nó hoàn toàn tốt đẹp để tạo ra nhiều chỉ mục trùng lặp. Sau khi tất cả, thực hiện của bạn sẽ giống như một mặc định với sự khác biệt duy nhất mà bạn vượt qua một cái gì đó có ý nghĩa như con trỏ dữ liệu để createIndex() thay vì NULL (như thực hiện mặc định không). –
Ok, cảm ơn. Tôi sẽ cố gắng giữ một QMap trong mã của tôi và trả về một QModelIndex mới nếu QMap không chứa QModelIndex thích hợp tại một hàng nhất định. Tôi sẽ liên lạc lại với bạn về cách nó đi. –