MyTetra Share
Делитесь знаниями!
Как добавить свой тип в QVariant, и как добавить указатель на свой тип в QVariant
Время создания: 20.03.2016 22:41
Автор: Xintrea
Текстовые метки: qt, QVariant, тип, указатель
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Принципы написания кода
Запись: xintrea/mytetra_syncro/master/base/14325600719teuolwljs/text.html на raw.github.com

Как добавить свой класс или тип в QVariant


Добавим к типам QVariant собственный класс или структуру, чтобы с ней можно было бы общаться как с другими типами - помещать и извлекать из QVariant. Это делается так:

class SomeClass
{
//всё что нужно
};
Q_DECLARE_METATYPE(SomeClass);


То есть, после определения класса (или после создания типа через typedef) достаточно вызвать макрос Q_DECLARE_METATYPE(), и данный класс (тип) будет добавлен в QVariant.


Помещаем экземпляр класса в QVariant

SomeClass scl;
QVariant vclass = QVariant::fromValue(scl);


Всё, теперь экземпляр класса SomeClass, хранится как QVariant и с ним можно делать всё, что и с объектами типа QVariant.


Обратное преобразование, т. е. из QVariant в тип своего класса

// Загоняем объект в QVariant

SomeClass scl;
QVariant vclass = QVariant::fromValue(scl);

// Извлекаем объект из QVariant

SomeClass scl2 = qvariant_cast(vclass);



Как добавить указатель на свой класс или тип в QVariant


Задача: добавить тип "указатель на объект" в QVariant. Делается это так:


// Создается отдельный тип указателя на объект

typedef НазваниеТипа *НазваниеУказателяНаТип;


// Тип указателя на объект добавляется в QVariant

Q_DECLARE_METATYPE(НазваниеУказателяНаТип)



Помещение указателя на объект в QVariant

QVariant var;

var.setValue<НазваниеУказателяНаТип>(УказательНаОбъект);



Получение из QVariant указателя на объект


НазваниеУказателяНаТип myObject=var.value<НазваниеУказателяНаТип>();


или так:


НазваниеУказателяНаТип myObject=qVariantFromValue(УказательНаОбъект);


Примерно так можно передать практически любой объект.

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования