[Interest] qRegisterMetaType<QList<QSslError> > and type flags

Jan Kundrát jkt at flaska.net
Wed Jan 2 16:43:27 CET 2013


Hi,
I'm getting the following error message from Qt5's port of Trojita:

QMetaType::registerType: Binary compatibility break -- Type flags for type 'QList<QSslError>' [1062] don't match. Previously registered TypeFlags(0x7), now registering TypeFlags(0x107).

The backtrace leads back to the constructor of QNetworkAccessManager:

#4  0x00007fffed848fc1 in QMetaType::registerNormalizedType (normalizedTypeName=..., deleter=0x7fffee597605 <QtMetaTypePrivate::QMetaTypeFunctionHelper<QList<QSslError>, true>::Delete(void*)>, creator=0x7fffee597655 <QtMetaTypePrivate::QMetaTypeFunctionHelper<QList<QSslError>, true>::Create(void const*)>, 
    destructor=0x7fffee5976d2 <QtMetaTypePrivate::QMetaTypeFunctionHelper<QList<QSslError>, true>::Destruct(void*)>, constructor=0x7fffee59770f <QtMetaTypePrivate::QMetaTypeFunctionHelper<QList<QSslError>, true>::Construct(void*, void const*)>, size=8, flags=..., metaObject=0x0) at kernel/qmetatype.cpp:652
#5  0x00007fffee596f71 in qRegisterNormalizedMetaType<QList<QSslError> >(QByteArray const&, QList<QSslError>*, QtPrivate::MetaTypeDefinedHelper<QList<QSslError>, (QMetaTypeId2<QList<QSslError> >::Defined)&&(!(QMetaTypeId2<QList<QSslError> >::IsBuiltIn))>::DefinedType) (normalizedTypeName=..., 
    dummy=0xffffffffffffffff, defined=QtPrivate::MetaTypeDefinedHelper<QList<QSslError>, true>::Defined) at ../../include/QtCore/../../src/corelib/kernel/qmetatype.h:602
#6  0x00007fffee596873 in qRegisterMetaType<QList<QSslError> >(char const*, QList<QSslError>*, QtPrivate::MetaTypeDefinedHelper<QList<QSslError>, (QMetaTypeId2<QList<QSslError> >::Defined)&&(!(QMetaTypeId2<QList<QSslError> >::IsBuiltIn))>::DefinedType) (typeName=0x7fffee692b87 "QList<QSslError>", 
    dummy=0xffffffffffffffff, defined=QtPrivate::MetaTypeDefinedHelper<QList<QSslError>, true>::Defined) at ../../include/QtCore/../../src/corelib/kernel/qmetatype.h:618
#7  0x00007fffee5965c4 in QMetaTypeId<QList<QSslError> >::qt_metatype_id () at ../../include/QtNetwork/../../src/network/ssl/qsslsocket.h:227
#8  0x00007fffee5979f6 in QMetaTypeId2<QList<QSslError> >::qt_metatype_id () at ../../include/QtCore/../../src/corelib/kernel/qmetatype.h:534
#9  0x00007fffee5973a6 in qMetaTypeId<QList<QSslError> > () at ../../include/QtCore/../../src/corelib/kernel/qmetatype.h:643
#10 0x00007fffee596cde in qRegisterMetaType<QList<QSslError> > (dummy=0x0) at ../../include/QtCore/../../src/corelib/kernel/qmetatype.h:656
#11 0x00007fffee59b9ca in QNetworkAccessManager::QNetworkAccessManager (this=0x555555b47530, parent=0x555555b4b7c0) at access/qnetworkaccessmanager.cpp:415
#12 0x00005555556bda5b in Imap::Network::MsgPartNetAccessManager::MsgPartNetAccessManager (this=0x555555b47530, parent=0x555555b4b7c0) at ../../../../trojita/src/Imap/Network/MsgPartNetAccessManager.cpp:40

My code contains calls to:

  qRegisterMetaType<QList<QSslError> >("QList<QSslError>");

There are no calls to Q_DELCARE_METATYPE or Q_DECLARE_TYPEINFO mentioning QSslError or QList<QSslError> in my code.

According to the error message, the extra type flag being set is the WasDeclaredAsMetaType (which is not documented in the docs available on the web [1] for some reason). I won't pretend I understand the metatype system enough to tell whether this particular flag shall be ignored or not. The weird thing is that I recall that my code has worked at some time...

What should I do to restore functionality under Qt5?

With kind regards,
Jan

[1] http://qt-project.org/doc/qt-5.0/qtcore/qmetatype.html#TypeFlag-enum

-- 
Trojitá, a fast Qt IMAP e-mail client -- http://trojita.flaska.net/



More information about the Interest mailing list