diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-04-14 17:13:11 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-04-15 09:24:48 +0000 |
commit | b2e766c0cf4b5ae027f8d96202a9a9d29a7d84d4 (patch) | |
tree | 3973cf29c8cc6a2bbaf66b6b9a68f28e5935c1a1 /src/quicktemplates2/qquickscrollbar.cpp | |
parent | 8ed4c6caf5fd464adf3c41192a97e47b48acb713 (diff) |
ScrollBar|Indicator: use QQmlInfo and don't crash with non-Flickables
Before:
ScrollBar must be attached to a Flickable QQuickItem(0x1774640)
The program has unexpectedly finished.
After:
qrc:/main.qml:9:5: QML : ScrollBar must be attached to a Flickable
Change-Id: I689d70744f64e209eacb4cb743ad64e904f29cd4
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
Diffstat (limited to 'src/quicktemplates2/qquickscrollbar.cpp')
-rw-r--r-- | src/quicktemplates2/qquickscrollbar.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp index 7ca9e55a..f948ce5a 100644 --- a/src/quicktemplates2/qquickscrollbar.cpp +++ b/src/quicktemplates2/qquickscrollbar.cpp @@ -37,6 +37,7 @@ #include "qquickscrollbar_p.h" #include "qquickcontrol_p_p.h" +#include <QtQml/qqmlinfo.h> #include <QtQuick/private/qquickflickable_p.h> #include <QtQuick/private/qquickitemchangelistener_p.h> @@ -164,11 +165,10 @@ QQuickScrollBar::QQuickScrollBar(QQuickItem *parent) : QQuickScrollBarAttached *QQuickScrollBar::qmlAttachedProperties(QObject *object) { QQuickFlickable *flickable = qobject_cast<QQuickFlickable *>(object); - if (flickable) - return new QQuickScrollBarAttached(flickable); + if (!flickable) + qmlInfo(object) << "ScrollBar must be attached to a Flickable"; - qWarning() << "ScrollBar must be attached to a Flickable" << object; - return nullptr; + return new QQuickScrollBarAttached(flickable); } /*! @@ -488,17 +488,21 @@ QQuickScrollBarAttached::QQuickScrollBarAttached(QQuickFlickable *flickable) : QObject(*(new QQuickScrollBarAttachedPrivate(flickable)), flickable) { Q_D(QQuickScrollBarAttached); - QQuickItemPrivate *p = QQuickItemPrivate::get(flickable); - p->updateOrAddGeometryChangeListener(d, QQuickItemPrivate::SizeChange); + if (flickable) { + QQuickItemPrivate *p = QQuickItemPrivate::get(flickable); + p->updateOrAddGeometryChangeListener(d, QQuickItemPrivate::SizeChange); + } } QQuickScrollBarAttached::~QQuickScrollBarAttached() { Q_D(QQuickScrollBarAttached); - if (d->horizontal) - QQuickItemPrivate::get(d->horizontal)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); - if (d->vertical) - QQuickItemPrivate::get(d->vertical)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); + if (d->flickable) { + if (d->horizontal) + QQuickItemPrivate::get(d->horizontal)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); + if (d->vertical) + QQuickItemPrivate::get(d->vertical)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); + } } /*! @@ -525,7 +529,7 @@ void QQuickScrollBarAttached::setHorizontal(QQuickScrollBar *horizontal) if (d->horizontal == horizontal) return; - if (d->horizontal) { + if (d->horizontal && d->flickable) { QQuickItemPrivate::get(d->horizontal)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); QObjectPrivate::disconnect(d->horizontal, &QQuickScrollBar::positionChanged, d, &QQuickScrollBarAttachedPrivate::scrollHorizontal); QObjectPrivate::disconnect(d->flickable, &QQuickFlickable::movingHorizontallyChanged, d, &QQuickScrollBarAttachedPrivate::activateHorizontal); @@ -538,7 +542,7 @@ void QQuickScrollBarAttached::setHorizontal(QQuickScrollBar *horizontal) d->horizontal = horizontal; - if (horizontal) { + if (horizontal && d->flickable) { if (!horizontal->parentItem()) horizontal->setParentItem(d->flickable); horizontal->setOrientation(Qt::Horizontal); @@ -583,7 +587,7 @@ void QQuickScrollBarAttached::setVertical(QQuickScrollBar *vertical) if (d->vertical == vertical) return; - if (d->vertical) { + if (d->vertical && d->flickable) { QQuickItemPrivate::get(d->vertical)->removeItemChangeListener(d, QQuickItemPrivate::Geometry); QObjectPrivate::disconnect(d->vertical, &QQuickScrollBar::positionChanged, d, &QQuickScrollBarAttachedPrivate::scrollVertical); QObjectPrivate::disconnect(d->flickable, &QQuickFlickable::movingVerticallyChanged, d, &QQuickScrollBarAttachedPrivate::activateVertical); @@ -596,7 +600,7 @@ void QQuickScrollBarAttached::setVertical(QQuickScrollBar *vertical) d->vertical = vertical; - if (vertical) { + if (vertical && d->flickable) { if (!vertical->parentItem()) vertical->setParentItem(d->flickable); vertical->setOrientation(Qt::Vertical); |