Tôi đang cố gắng sử dụng các lớp tùy chỉnh trong QAbstractListModel và Q_DECLARE_METATYPE không hoạt động chút nào!Q_DECLARE_METATYPE không hoạt động ở tất cả
Để kiểm tra nơi mà vấn đề là, tôi đã đơn giản hóa các mã như sau:
#include <QMetaType>
#include <QVariant>
#include <QDebug>
typedef int x;
Q_DECLARE_METATYPE(x)
void main() {
QVariant v;
qDebug() << v.canConvert<x>();
}
và đầu ra vẫn còn sai!
btw, đoạn code tôi muốn thực hiện là như:
namespace ns{
class a {
public:
a(); //default constructor
a(const a&); //copy constructor
~a();
}
}
Q_DECALRE_METATYPE(ns::a);
và khi tôi cố gắng reimplement QAbstractListModel :: dữ liệu như thế này:
QList<ns::s> list; //this is actually a member field of the custom model.
QVariant MyListModel::data(const QModelIndex& index, int role) const {
Q_UNUSED(role)
return list.at(index.row());
}
trình biên dịch sẽ báo cáo và báo lỗi như sau:
cannot convert const ns::a to QVariant::Type
vâng, tôi đột nhiên nhận ra nơi vấn đề là. vấn đề là khi thực hiện 'MyModel :: data (const QModelIndex & index, int role) const', tôi nên sử dụng' return QVariant :: fromValue (MyClass) 'thay vì' return Myclass'. – user2826776
Đọc [doc loại tài liệu tùy chỉnh Qt] (http://doc.qt.io/qt-5/custom-types.html), tôi không chắc chắn cách sử dụng macro. Khi 'Q_DECLARE_METATYPE (MyClass);' nằm trong phạm vi của chính lớp đó, quá trình biên dịch không thành công với lỗi 'chuyên môn hóa rõ ràng trong phạm vi không gian tên 'lớp MyClass''. Ví dụ hiển thị vị trí chính xác để chèn macro. Cảm ơn! – fgiraldeau