crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Перевести QVariant обратно в мой указатель на объект
kruger
  опции профиля:
сообщение 27.10.2015, 10:51
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 6.10.2015
Пользователь №: 4459

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня есть класс производный от QObject.
Я его засовываю в QVariant таким образом:
QVariant::fromValue<QObject *>(pStatus);

Обратно пытаюсь перевести так:
CMyStatus *pObj = qvariant_cast<CMyStatus *>( var );
Но появляется такая ошибка:
Цитата
/usr/include/qt4/QtCore/qmetatype.h:169:80: error: 'qt_metatype_id' is not a member of 'QMetaTypeId<CMyStatus*>'
static inline int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }


Как правильно получить мой объект из QVariant?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.10.2015, 12:25
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kruger @ 27.10.2015, 12:51) *
Я его засовываю в QVariant таким образом:
QVariant::fromValue<QObject *>(pStatus);
а зачем ты к QObject * приводишь? Так ты из QVariant-а только указатель на QObject и сможешь вынуть.

См. доку по
T QVariant::value () const
и void QVariant::setValue ( const T & value )
Этого достаточно

Сообщение отредактировал Litkevich Yuriy - 27.10.2015, 12:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 27.10.2015, 12:31
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3290
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Тут всё намного проще чем кажется, просто после объявления твоего класса CMyStatus добавь строчку:
Q_DECLARE_METATYPE(CMyStatus*)
И всё заработает! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kruger
  опции профиля:
сообщение 27.10.2015, 12:52
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 6.10.2015
Пользователь №: 4459

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 27.10.2015, 12:25) *
а зачем ты к QObject * приводишь? Так ты из QVariant-а только указатель на QObject и сможешь вынуть.
А как же виртуальное наследование и прочее? Это мысли в слух. Ты прав, поменяв с QObject на CMyStatus, стал получать валидный указатель, а до этого был 0x0, что странно!
В qvariant_cast приведение происходит с помощью reinterpret_cast, а не dynamic_cast, тогда почему 0x0 в случае с приведением объекта к родителю и последующим прведением к QVariant?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.10.2019, 7:22