برمجة QT: كيفية استخدام نوع البيانات المخصصة في QVariantMap؟

StackOverflow https://stackoverflow.com/questions/4303818

سؤال

أنا أكتب تطبيق 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) ، ومدمرة عامة (موافق) ومُنشئ نسخ عام (مفقود يخبرك به رسالة الخطأ) ، راجع توثيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top