Программирование 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();
}

И в другом классе я пытался добавить мёты экземпляры для QVaniantMap:

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), вашему классу нужен публичный конститутор по умолчанию (ОК), публичный разрушитель (ОК) и конструктор публичной копии (не хватает того, о чем сообщает вам сообщение), см. документация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top