diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-03-23 13:03:06 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-03-24 13:27:48 +0000 |
commit | aac1e246e46ab6ea70c14a61b1340d529763787d (patch) | |
tree | 51e891613536ad8a0a92af619b266678aa4c4ddb /src/quicktemplates2/qquickstackelement.cpp | |
parent | 762d4ceb5fe19d97bcdbdba1dae74816126b7b75 (diff) |
StackView: provide better warnings and errors
Check for valid URLs and test object types. Throw warnings when
appropriate instead of crashing later.
Task-number: QTBUG-59634
Change-Id: Ia269dc8afd31b618f1ff7aec94d684029cb78244
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickstackelement.cpp')
-rw-r--r-- | src/quicktemplates2/qquickstackelement.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/quicktemplates2/qquickstackelement.cpp b/src/quicktemplates2/qquickstackelement.cpp index aace170b..27331afe 100644 --- a/src/quicktemplates2/qquickstackelement.cpp +++ b/src/quicktemplates2/qquickstackelement.cpp @@ -122,17 +122,30 @@ QQuickStackElement::~QQuickStackElement() delete context; } -QQuickStackElement *QQuickStackElement::fromString(const QString &str, QQuickStackView *view) +QQuickStackElement *QQuickStackElement::fromString(const QString &str, QQuickStackView *view, QString *error) { + QUrl url(str); + if (!url.isValid()) { + *error = QStringLiteral("invalid url: ") + str; + return nullptr; + } + QQuickStackElement *element = new QQuickStackElement; - element->component = new QQmlComponent(qmlEngine(view), QUrl(str), view); + element->component = new QQmlComponent(qmlEngine(view), url, view); element->ownComponent = true; return element; } -QQuickStackElement *QQuickStackElement::fromObject(QObject *object, QQuickStackView *view) +QQuickStackElement *QQuickStackElement::fromObject(QObject *object, QQuickStackView *view, QString *error) { Q_UNUSED(view); + QQmlComponent *component = qobject_cast<QQmlComponent *>(object); + QQuickItem *item = qobject_cast<QQuickItem *>(object); + if (!component && !item) { + *error = QQmlMetaType::prettyTypeName(object) + QStringLiteral(" is not supported. Must be Item or Component."); + return nullptr; + } + QQuickStackElement *element = new QQuickStackElement; element->component = qobject_cast<QQmlComponent *>(object); element->item = qobject_cast<QQuickItem *>(object); |