aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickstackelement.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-03-23 13:03:06 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2017-03-24 13:27:48 +0000
commitaac1e246e46ab6ea70c14a61b1340d529763787d (patch)
tree51e891613536ad8a0a92af619b266678aa4c4ddb /src/quicktemplates2/qquickstackelement.cpp
parent762d4ceb5fe19d97bcdbdba1dae74816126b7b75 (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.cpp19
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);