summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2016-08-17 11:09:12 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2016-08-31 07:07:13 +0000
commita9e5e09f156b09c7f65e0b57fe191d71f9c1aa3e (patch)
tree48886cd962fb3f924b14d203054ed52700441aff
parentf067e5d7e510842825be883dade904a9a4d3ec05 (diff)
Qt Designer: Adapt warning about mismatched class namesv5.6.2
Move the exclusion check to a static function and suppress the warning for the fake QWebEngineView class, too. Task-number: QTBUG-53984 Change-Id: I445bcf37b92e5677342e18698fd4b0b07fa4ca10 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
-rw-r--r--src/designer/src/lib/shared/widgetfactory.cpp34
1 files changed, 23 insertions, 11 deletions
diff --git a/src/designer/src/lib/shared/widgetfactory.cpp b/src/designer/src/lib/shared/widgetfactory.cpp
index 1478f45e6..0357104fe 100644
--- a/src/designer/src/lib/shared/widgetfactory.cpp
+++ b/src/designer/src/lib/shared/widgetfactory.cpp
@@ -242,6 +242,25 @@ QObject* WidgetFactory::createObject(const QString &className, QObject* parent)
return 0;
}
+// Check for mismatched class names in plugins, which is hard to track.
+static bool classNameMatches(const QObject *created, const QString &className)
+{
+#ifdef Q_OS_WIN
+ // Perform literal comparison first for QAxWidget, for which a meta object hack is in effect.
+ if (isAxWidget(created))
+ return true;
+#endif
+ const char *createdClassNameC = created->metaObject()->className();
+ const QByteArray classNameB = className.toUtf8();
+ const char *classNameC = classNameB.constData();
+ if (qstrcmp(createdClassNameC, classNameC) == 0 || created->inherits(classNameC))
+ return true;
+ // QTBUG-53984: QWebEngineView property dummy
+ if (classNameB == "QWebEngineView" && qstrcmp(createdClassNameC, "fake::QWebEngineView") == 0)
+ return true;
+ return false;
+}
+
QWidget* WidgetFactory::createCustomWidget(const QString &className, QWidget *parentWidget, bool *creationError) const
{
*creationError = false;
@@ -287,19 +306,12 @@ QWidget* WidgetFactory::createCustomWidget(const QString &className, QWidget *p
if (lang)
return rc;
-#ifdef Q_OS_WIN
- if (isAxWidget(rc))
- return rc;
-#endif
// Check for mismatched class names which is hard to track.
- // Perform literal comparison first for QAxWidget, for which a meta object hack is in effect.
- const char *createdClassNameC = rc->metaObject()->className();
- const QByteArray classNameB = className.toUtf8();
- const char *classNameC = classNameB.constData();
-
- if (qstrcmp(createdClassNameC, classNameC) && !rc->inherits(classNameC))
+ if (!classNameMatches(rc, className)) {
designerWarning(tr("A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1."
- " It returned a widget of class %2.").arg(className).arg(QString::fromUtf8(createdClassNameC)));
+ " It returned a widget of class %2.")
+ .arg(className, QString::fromUtf8(rc->metaObject()->className())));
+ }
return rc;
}