2011-01-16 70 views
11

Trong lớp con QAbstractListModel đã được tạo sẵn, làm cách nào để thêm hàng có dữ liệu trong mỗi cột và có QListView liên kết hiển thị hàng mới? Có vẻ như cách duy nhất để làm điều đó là reimplement insertRow và setData trong mô hình của tôi, và sau đó hack chúng lại với nhau trong một số loại chuỗi trong một hàm khác để thêm một hàng. Tôi phải làm điều này? Chắc chắn Qt phải làm cho nó dễ dàng hơn để thêm một hàng mới.Lập trình thêm hàng mới vào phân lớp QAbstractListModel

Cảm ơn nhiều! --Dany.

+1

Khi nhìn vào câu hỏi này một lần nữa, tôi nhận ra rằng tôi đơn giản bị cháy khi viết: P Câu hỏi của tôi nói một cách đơn giản là: làm thế nào Tôi thêm một hàng mới vào lớp con QAbstractItemModel của tôi? –

Trả lời

15

Chỉ cần thay đổi bộ nhớ dữ liệu của mô hình, ở giữa beginInsertRows() và endInsertRows(). Ví dụ:

Ví dụ: giả sử bạn có mô hình danh sách phẳng và mô hình lưu trữ dữ liệu nội bộ trong m_data QVector. Bạn muốn thêm vào danh sách, tức là chèn một hàng ở vị trí 0:

beginInsertRows(QModelIndex(), 0, 0); //notify views and proxy models that a line will be inserted 
m_data.prepend(somedata); // do the modification to the model data 
endInsertRows(); //finish insertion, notify views/models 
+0

Điều này làm việc tốt, và đó là một bước đột phá dễ chịu để cuối cùng thấy một số mục trong chế độ xem danh sách của tôi. Tuy nhiên, tôi đã dành một ngày rưỡi cố gắng để tìm ra tất cả điều này, và bây giờ vấn đề mới nhất của tôi là cố gắng hiển thị một tập hợp dữ liệu 1x4. Hiện tại, nó chỉ hiển thị một cột dữ liệu và không có tiêu đề cột nào của tôi. Bạn có bất kỳ gợi ý về những gì đang xảy ra không? Tôi bên cạnh hoàn toàn thất vọng với khó khăn như thế nào để có được Qt để làm một cái gì đó đơn giản như dữ liệu danh sách .-- Dany. –

+3

@nessup: QListView chỉ hỗ trợ một cột. Nếu bạn muốn nhiều cột và tiêu đề, bạn cần sử dụng QTreeView hoặc QTableView. –

1

Tôi e rằng bạn phải làm theo cách đó. Từ docs:

Models mà cung cấp giao diện để thay đổi kích thước cấu trúc dữ liệu danh sách giống như có thể cung cấp triển khai của insertRows()removeRows().

+0

các liên kết đó đã chết – Aidenhjj

Các vấn đề liên quan