Мне нужно преобразовать QSqlRecord в QVariant и обратно по всему моему проекту. Для этого я добавил
Q_DECLARE_METATYPE(QSqlRecord);
в файлах .h классов, которые требуют приведения. У меня также есть базовый класс, от которого наследуют несколько детей, в этом случае я полагаю, что достаточно включить Q_DECLARE_METATYPE только один раз в базовый класс. Поэтому у меня есть, например:
- widgetBaseClass: объявляет метатип
- widgetChildClass1: наследует widgetBaseClass, не объявляет метатип
- widgetChildClass2: наследует widgetBaseClass, не объявляет метатип
- myTableModel: объявляет метатип
Когда я пытаюсь запустить такую программу, я получаю
Redefinition of 'QMetaTypeId<QSqlRecord>
из widgetBaseClass, указывая на предыдущее объявление в myTableModel. Если, с другой стороны, я удаляю объявление, я получаю:
static_assert failed "Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system");
Из того, как я понимаю работу Q_DECLARE_METATYPE, это означает, что если я объявлю его, это приведет к ошибке, потому что он уже был объявлен где-то еще, но если я его не объявлю, я не могу выполнить преобразование из QVariant, потому что он не распознает объект как действительный QVariant, что мне не хватает?