moc: Generate qt_static_metacall for creatable-only gadgets

Prior to this, moc would not generate the function unless the
gadget class had a property or a non-constructor invokable.

Change-Id: Ic020ea5f8f59702f5e9e194a46e26850e53e5cfe
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This commit is contained in:
Gabriel de Dietrich 2015-05-11 13:11:59 +02:00
parent d6efc6b543
commit 629f5a46d5
2 changed files with 8 additions and 5 deletions

View File

@ -448,7 +448,8 @@ void Generator::generateCode()
// Generate internal qt_static_metacall() function
//
const bool hasStaticMetaCall = !isQt &&
(cdef->hasQObject || !cdef->methodList.isEmpty() || !cdef->propertyList.isEmpty());
(cdef->hasQObject || !cdef->methodList.isEmpty()
|| !cdef->propertyList.isEmpty() || !cdef->constructorList.isEmpty());
if (hasStaticMetaCall)
generateStaticMetacall();

View File

@ -90,13 +90,15 @@ struct QTBUG_31218_Derived : QTBUG_31218<-1<0> {};
class CreatableGadget
{
Q_GADGET
Q_PROPERTY(int a MEMBER a)
public:
Q_INVOKABLE CreatableGadget() : a(0xdeadbeef) { }
int a;
Q_INVOKABLE CreatableGadget()
{
CreatableGadget::qt_static_metacall((QObject*)this, QMetaObject::ReadProperty, -1, Q_NULLPTR);
}
};
CreatableGadget creatableGadget; // Force the compiler to use the constructor
struct MyStruct {};
struct MyStruct2 {};