Fix moc generating invalid code for slots with reference types as argument.
We can't have T& declared/registered as a metatype (wont compile), but using it as type for a slot argument is possible. With the recent introduction of metatype auto-registration we have to make sure that moc doesn't attempt to auto-register those. Simple types are handled correctly already, this fixes containers and smart pointers. Change-Id: Id96857c57d6ebf158a67e9d527c89dc195473b1b Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>bb10
parent
9d4814e18b
commit
8c1cb66712
|
|
@ -162,7 +162,7 @@ bool Generator::registerableMetaType(const QByteArray &propertyType)
|
|||
;
|
||||
|
||||
foreach (const QByteArray &smartPointer, smartPointers)
|
||||
if (propertyType.startsWith(smartPointer + "<"))
|
||||
if (propertyType.startsWith(smartPointer + "<") && !propertyType.endsWith("&"))
|
||||
return knownQObjectClasses.contains(propertyType.mid(smartPointer.size() + 1, propertyType.size() - smartPointer.size() - 1 - 1));
|
||||
|
||||
static const QVector<QByteArray> oneArgTemplates = QVector<QByteArray>()
|
||||
|
|
@ -171,7 +171,7 @@ bool Generator::registerableMetaType(const QByteArray &propertyType)
|
|||
#undef STREAM_1ARG_TEMPLATE
|
||||
;
|
||||
foreach (const QByteArray &oneArgTemplateType, oneArgTemplates)
|
||||
if (propertyType.startsWith(oneArgTemplateType + "<")) {
|
||||
if (propertyType.startsWith(oneArgTemplateType + "<") && !propertyType.endsWith("&")) {
|
||||
const int argumentSize = propertyType.size() - oneArgTemplateType.size() - 1
|
||||
// The closing '>'
|
||||
- 1
|
||||
|
|
|
|||
|
|
@ -2510,6 +2510,12 @@ public slots:
|
|||
void bu4(CustomObject7, int, CustomObject8) {}
|
||||
void bu5(int, CustomObject9, CustomObject10) {}
|
||||
void bu6(int, CustomObject11, int) {}
|
||||
|
||||
// these can't be registered, but they should at least compile
|
||||
void ref1(int&) {}
|
||||
void ref2(QList<int>&) {}
|
||||
void ref3(CustomQObject2&) {}
|
||||
void ref4(QSharedPointer<CustomQObject2>&) {}
|
||||
};
|
||||
|
||||
void tst_Moc::autoPropertyMetaTypeRegistration()
|
||||
|
|
|
|||
Loading…
Reference in New Issue