Программирование Qt: Как использовать пользовательский тип данных в QVariantMap? - PullRequest
4 голосов
/ 29 ноября 2010

Я пишу приложение 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

Есть идеи по этому поводу?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Как сказал компилятор, не существует конструктора QVariant, который принимал бы myobj в качестве параметра.Вы пытались использовать вместо этого функцию qVariantFromValue?

Я думаю, это то, что вы ищете.

2 голосов
/ 29 ноября 2010

Если вы зарегистрируете свой пользовательский тип с помощью Q_DECLARE_METATYPE (myobj), вашему классу понадобится общедоступный конструктор по умолчанию (ок), публичный деструктор (ок) и общедоступный конструктор копирования (MISSING, о котором говорится в сообщении об ошибке), см. документация .

...