Для использования QMetaType
для вашего MySubClass
, он должен быть общедоступным.
Подумайте, почему вы хотите вставить MySubClass
в систему мета-типов Qt?
Если вы хотите иметь возможность отправить MySubClass
через сигнал / слот или (де) сериализовать / передать его, это сделает MySubClass
интересующим публичным интересом. Документы сообщают вам об этом :
Прежде чем мы начнем, мы должны убедиться, что создаваемый нами пользовательский тип соответствует всем требованиям, предъявляемым QMetaType.Другими словами, он должен предоставить:
a public default constructor,
a public copy constructor, and
a public destructor.
Если вы просто хотите сохранить MySubClass
экземпляров в QVariant
, вы можете написать свои собственные методы преобразования
QVariant toVariant() const
и
(static) MySubClass fromVariant(QVariant const &v)
Для обеспечения безопасности типов вы можете создать публичный фиктивный тип и зарегистрировать его с помощью QMetaType
, чтобы получить уникальный идентификатор, но в основном вам нужнопреобразуйте ваш MySubClass
в QVariantMap
и обратно, при условии, что все содержащиеся в нем данные можно сохранить в QVariant
.