2012-02-12 33 views
10

Tôi có QListWidget lịch. Mỗi QListWidgetItem được liên kết hợp lý với một thể hiện của Calendar, là một lớp thuộc về phía Mô hình của ứng dụng.Lưu trữ con trỏ bằng cách sử dụng QListWidgetItem :: setData

Tôi có thể lưu trữ liên kết này dưới dạng con trỏ sử dụng QListWidgetItem::setData không? Khi tôi cố gắng để làm điều này, tôi nhận được lỗi sau:

error: 'QVariant::QVariant(void*)' is private

Trả lời

25

Có một constructor cho void *: QVariant::QVariant(int typeOrUserType, const void * copy) nơi bạn nên vượt qua một số nguyên duy nhất để thể hiện kiểu con trỏ.

Nhưng như đã nêu trong tài liệu, bạn có thể khai báo loại con trỏ của mình bằng Q_DECLARE_METATYPE(Calendar*) và sử dụng QVariant::fromValue<Calendar*>(...)QVariant::value<Calendar*>() để lưu trữ và truy xuất giá trị.

Hoặc thay vào đó, bởi vì bạn đang sử dụng một QListWidget thay vì một mô hình thông thường, bạn chỉ có thể phân lớp QListWidgetItem, và thêm một biến Calendar* thành viên với accessors yêu cầu, để tránh việc sử dụng QVariant.

+0

+1, sẽ không đề xuất đường dẫn lớp con. (Và trong trường hợp chuyển đổi QVariant là một vấn đề hiệu suất, sử dụng các mô hình/lượt xem dựa trên mặt hàng sẽ nhiều hơn thế). –

+0

hiện đang làm việc cho tôi – user49557

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