Как добавить свой класс или тип в 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(УказательНаОбъект);
Примерно так можно передать практически любой объект.