برمجة QT: كيفية استخدام نوع البيانات المخصصة في QVariantMap؟
-
29-09-2019 - |
سؤال
أنا أكتب تطبيق QT يقوم بتعيين فئة C ++ إلى كائن JavaScript في QTWebKit. أولاً ، اسمحوا لي أن أشرح ما أحاول القيام به:
لدي فئة ورثت من Qobject:
class myobj : public QObject {
Q_OBJECT
public:
myobj();
~myobj();
pulbic slots:
void getData();
}
وفي فصل آخر ، حاولت إضافة مثيلات myobj إلى QVariantMap:
QVariantMap anotherClass::getObj() {
myobj* obj1 = new myobj();
myobj* obj2 = new myobj();
QVariantMap items;
items.insert(QString("0"), QVariant(*obj1));
items.insert(QString("1"), QVariant(*obj2));
return items;
}
ثم حصلت على الخطأ التالي:
error: no matching function for call to ‘QVariant::QVariant(myobj&)’
لذلك حاولت إضافة إعلانات:
Q_DECLARE_METATYPE(myobj);
لكنني حصلت:
error: ‘QObject::QObject(const QObject&)’ is private
أي فكرة عن هذا؟
المحلول
كما قال المترجم ، لا يوجد مُنشئ QVariant
موجود يأخذ myobj
كمعلمة. هل حاولت استخدام qVariantFromValue
وظيفة بدلا من ذلك؟
أعتقد أن هذا هو ما تبحث عنه.
نصائح أخرى
إذا قمت بتسجيل النوع المخصص الخاص بك مع Q_DECLARE_METATYPE (MYOBJ) ، فإن فصلك يحتاج إلى مصنع افتراضي عام (OK) ، ومدمرة عامة (موافق) ومُنشئ نسخ عام (مفقود يخبرك به رسالة الخطأ) ، راجع توثيق.
لا تنتمي إلى StackOverflow