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