Russian Qt Forum
Ноябрь 24, 2024, 23:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QVariant: как извлечь из него список пользовательских структур ?  (Прочитано 8105 раз)
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) ?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Январь 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 *>();
« Последнее редактирование: Январь 10, 2008, 22:52 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Cyrax
Гость
« Ответ #2 : Январь 10, 2008, 23:25 »

Мне нужно из QVariant'а извлечь объект типа QList<SolutionTag>, где SolutionTag - некоторая структура...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Январь 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>();
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Cyrax
Гость
« Ответ #4 : Январь 11, 2008, 13:18 »

Так работает. Причём работает и без указателей:
Цитировать
typedef QList<Solution> SolutionList;
Q_DECLARE_METATYPE(SolutionList);

Тогда может и так сработает (без typedef'а):
Q_DECLARE_METATYPE(QList<Solution>);
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Январь 11, 2008, 16:43 »

typedef для красивости Улыбающийся Скажем так рюшичек Подмигивающий
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Cyrax
Гость
« Ответ #6 : Январь 12, 2008, 13:20 »

А с enum'ами так не прокатывает.
Приходися вначале QVariant в int перегонять, затем в тип моего перечисления:
Цитировать
(myEnum)variant.value<int>
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 23.