Russian Qt Forum

Qt => Общие вопросы => Тема начата: Cyrax от Январь 10, 2008, 22:26



Название: QVariant: как извлечь из него список пользовательских структур ?
Отправлено: Cyrax от Январь 10, 2008, 22:26
В QVariant запихиваю объект QList<parameterValue>, где parameterValue - моя структура.
Вернее, в методе data моей модели данных возвращаю структуру типа parameterValue.
Затем пытаюсь эту структуру оттуда извлечь (value - типа QVariant с данной структурой внутри):
Цитировать
... = value.value<parameterValue>;
В результате получаю:
Цитировать
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/kernel/qmetatype.h   instantiated from `int qMetaTypeId(T*) [with T = QList<parameterValue>]'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/kernel/qmetatype.h `qt_metatype_id' is not a member of `QMetaTypeId<QList<parameterValue> >'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/kernel/qvariant.h   instantiated from `T qvariant_cast(const QVariant&) [with T = QList<parameterValue>]'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/kernel/qvariant.h   instantiated from `T qvariant_cast(const QVariant&) [with T = QList<parameterValue>]'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/kernel/qvariant.h   instantiated from `T qVariantValue(const QVariant&) [with T = QList<parameterValue>]'

Т.е. как передавать свои структуры через объект QVariant (метод data модели данных может передать только QVariant) ?


Название: Re: QVariant: как извлечь из него список пользовательских структур ?
Отправлено: pastor от Январь 10, 2008, 22:50
Немного непонятен вопрос, что именно нужно установить\получить в качестве данных для QVariant: список структур или саму структуру.

Для структуры я делал вот так:

Код:
typedef struct SolutionTag
{
    char *solution;
    SolutionTag *next;
    SolutionTag *prev;
} Solution;

Q_DECLARE_METATYPE(Solution *);

//Установка значения

QVariant v;
v.setValue(sol);

//Получение значения

Solution *sol = v.value<Solution *>();


Название: Re: QVariant: как извлечь из него список пользовательских структур ?
Отправлено: Cyrax от Январь 10, 2008, 23:25
Мне нужно из QVariant'а извлечь объект типа QList<SolutionTag>, где SolutionTag - некоторая структура...


Название: Re: QVariant: как извлечь из него список пользовательских структур ?
Отправлено: pastor от Январь 11, 2008, 01:05
как вариант можно попробывать сделать так:

Код:
typedef struct SolutionTag
{
char *solution;
SolutionTag *next;
SolutionTag *prev;
} Solution;

typedef QList<Solution *> SolutionList;

Q_DECLARE_METATYPE(SolutionList);

..............................

SolutionList list;

QVariant v;
v.setValue(list);

..................................

SolutionList list2 = v.value<SolutionList>();


Название: Re: QVariant: как извлечь из него список пользовательских структур ?
Отправлено: Cyrax от Январь 11, 2008, 13:18
Так работает. Причём работает и без указателей:
Цитировать
typedef QList<Solution> SolutionList;
Q_DECLARE_METATYPE(SolutionList);

Тогда может и так сработает (без typedef'а):
Q_DECLARE_METATYPE(QList<Solution>);


Название: Re: QVariant: как извлечь из него список пользовательских структур ?
Отправлено: pastor от Январь 11, 2008, 16:43
typedef для красивости :) Скажем так рюшичек ;)


Название: Re: QVariant: как извлечь из него список пользовательских структур ?
Отправлено: Cyrax от Январь 12, 2008, 13:20
А с enum'ами так не прокатывает.
Приходися вначале QVariant в int перегонять, затем в тип моего перечисления:
Цитировать
(myEnum)variant.value<int>