QVariant can accept pointers to QObject right out of the box so you don't have to declare the metatype for your own class - you can store it normally and then after retrieving it, cast it to proper type.