Qt 5.4 was released three months ago; at Canonical we're starting to move the Ubuntu PÄ¥one codebase to it now and it has an important behavior change as noted in it's changes file (that is quite hard to find by the way, it took me like 5 minutes to find, and that's knowing it existed, searching for "qt 5.4 changelog" does not return http://qt-project.org/wiki/Change-files-in-Qt-5.4.0 that is the important page) that has affected us in many places
The important behavior change is that now some QVariants will be passed to C++ as QJSValue-QVariants instead of QStringList-QVariants, QMap-QVariants, etc so if your code did things like checking the variant type now it will fail, so basically for any C++ function that receives QVariants from QML you need to add extra code to unbox the QVariant, i.e.
void MyClass::myFunction(QVariant v) { // unbox the QVariant-QJSValue if (v.userType() == qMetaTypeId<QJSValue>()) { v = v.value<QJSValue>().toVariant(); } // This is your old code that checks the type // of the QVariant is a valid one if (v.type() != QVariant::Map && v.type() != QVariant::List && v.type() != QVariant::StringList) { qWarning() << "Bad param" << v; return; } // From here your old code that does things }