aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-07-14 01:02:04 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2018-07-16 09:38:30 +0200
commit43645fd59c6bcb0a3e37eef530ef970f51ed48af (patch)
treed377a19c36e9e853377db59b58d937db0ea67e0d /src
parentad0f200df54e5afcb1fdcb977794259bdb9216b5 (diff)
parentf42207cbdb0cbe5e345bfd9e000b3e77b34a503c (diff)
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts: src/quick/items/qquickloader.cpp tests/auto/quick/qquickanimations/tst_qquickanimations.cpp Change-Id: I0cb9f637d24ccd0ecfb50c455cc210119f744b02
Diffstat (limited to 'src')
-rw-r--r--src/imports/layouts/qquicklayout.cpp3
-rw-r--r--src/imports/window/plugins.qmltypes2
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp43
-rw-r--r--src/qml/doc/src/cppintegration/data.qdoc18
-rw-r--r--src/qml/doc/src/qtqml-cpp.qdoc2
-rw-r--r--src/qml/parser/qqmljsast.cpp22
-rw-r--r--src/qml/parser/qqmljsast_p.h2
-rw-r--r--src/quick/doc/images/flickable-contentXY-bottom-left.pngbin0 -> 2780 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-bottom-left.svgzbin0 -> 1575 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-bottom-right.pngbin0 -> 2386 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-bottom-right.svgzbin0 -> 1580 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-resting.pngbin0 -> 430 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-resting.svgzbin0 -> 1083 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-top-left.pngbin0 -> 3025 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-top-left.svgzbin0 -> 1550 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-top-right.pngbin0 -> 2866 bytes
-rw-r--r--src/quick/doc/images/flickable-contentXY-top-right.svgzbin0 -> 1594 bytes
-rw-r--r--src/quick/doc/src/guidelines/qtquick-bestpractices.qdoc54
-rw-r--r--src/quick/doc/src/includes/item.qdocinc6
-rw-r--r--src/quick/doc/src/qtquick-cpp.qdoc2
-rw-r--r--src/quick/items/qquickflickable.cpp27
-rw-r--r--src/quick/items/qquickitem.cpp31
-rw-r--r--src/quick/items/qquickloader.cpp8
-rw-r--r--src/quick/items/qquickrendercontrol.cpp3
-rw-r--r--src/quick/util/qquicktransition.cpp1
25 files changed, 187 insertions, 37 deletions
diff --git a/src/imports/layouts/qquicklayout.cpp b/src/imports/layouts/qquicklayout.cpp
index b3a5a2cfc8..cc206bcb95 100644
--- a/src/imports/layouts/qquicklayout.cpp
+++ b/src/imports/layouts/qquicklayout.cpp
@@ -764,6 +764,9 @@ bool QQuickLayout::shouldIgnoreItem(QQuickItem *child, QQuickLayoutAttached *&in
ignoreItem = effectiveMaxSize.isNull();
}
+ if (!ignoreItem && childPrivate->isTransparentForPositioner())
+ ignoreItem = true;
+
if (ignoreItem)
d->m_ignoredItems << child;
return ignoreItem;
diff --git a/src/imports/window/plugins.qmltypes b/src/imports/window/plugins.qmltypes
index 4ae23a093e..4815be7262 100644
--- a/src/imports/window/plugins.qmltypes
+++ b/src/imports/window/plugins.qmltypes
@@ -4,7 +4,7 @@ import QtQuick.tooling 1.2
// It is used for QML tooling purposes only.
//
// This file was auto-generated by:
-// 'qmlplugindump -nonrelocatable QtQuick.Window 2.10'
+// 'qmlplugindump -nonrelocatable QtQuick.Window 2.11'
Module {
dependencies: ["QtQuick 2.8"]
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp
index 17bae6d695..4c104f01de 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp
@@ -68,6 +68,37 @@ QT_BEGIN_NAMESPACE
using QQmlDebugPacket = QVersionedPacket<QQmlDebugConnector>;
+class NullDevice : public QIODevice
+{
+public:
+ NullDevice() { open(QIODevice::ReadWrite); }
+
+protected:
+ qint64 readData(char *data, qint64 maxlen) final;
+ qint64 writeData(const char *data, qint64 len) final;
+};
+
+qint64 NullDevice::readData(char *data, qint64 maxlen)
+{
+ Q_UNUSED(data);
+ return maxlen;
+}
+
+qint64 NullDevice::writeData(const char *data, qint64 len)
+{
+ Q_UNUSED(data);
+ return len;
+}
+
+// check whether the data can be saved
+// (otherwise we assert in QVariant::operator<< when actually saving it)
+static bool isSaveable(const QVariant &value)
+{
+ NullDevice nullDevice;
+ QDataStream fakeStream(&nullDevice);
+ return QMetaType::save(fakeStream, static_cast<int>(value.type()), value.constData());
+}
+
QQmlEngineDebugServiceImpl::QQmlEngineDebugServiceImpl(QObject *parent) :
QQmlEngineDebugService(2, parent), m_watch(new QQmlWatcher(this)), m_statesDelegate(nullptr)
{
@@ -106,13 +137,7 @@ QDataStream &operator<<(QDataStream &ds,
const QQmlEngineDebugServiceImpl::QQmlObjectProperty &data)
{
ds << (int)data.type << data.name;
- // check first whether the data can be saved
- // (otherwise we assert in QVariant::operator<<)
- QQmlDebugPacket fakeStream;
- if (QMetaType::save(fakeStream, data.value.type(), data.value.constData()))
- ds << data.value;
- else
- ds << QVariant();
+ ds << (isSaveable(data.value) ? data.value : QVariant());
ds << data.valueTypeName << data.binding << data.hasNotifySignal;
return ds;
}
@@ -247,8 +272,8 @@ QVariant QQmlEngineDebugServiceImpl::valueContents(QVariant value) const
}
}
- // We expect all QML value types to either have a toString() method or stream operators
- return value;
+ if (isSaveable(value))
+ return value;
}
}
diff --git a/src/qml/doc/src/cppintegration/data.qdoc b/src/qml/doc/src/cppintegration/data.qdoc
index 9d1a03a399..7fb4724f73 100644
--- a/src/qml/doc/src/cppintegration/data.qdoc
+++ b/src/qml/doc/src/cppintegration/data.qdoc
@@ -247,18 +247,18 @@ Similarly, if a C++ type uses a QDateTime for a property type or method
parameter, the value can be created as a JavaScript \c Date object in QML, and
is automatically converted to a QDateTime value when it is passed to C++.
-
-\section2 QTime to JavaScript Date
+//! Target adds an anchor, so renaming the section won't break incoming links.
+\target QTime to JavaScript Date
+\section2 QTime and JavaScript Date
The QML engine provides automatic type conversion from QTime values to
-JavaScript \c Date objects. The date component of the resulting Date
-object should not be relied upon, as it is operating system dependent.
-Specifically, the year (and month and day) are set to zero. Conversion
-from a JavaScript \c Date object to QTime is done by converting to a
-QDateTime, and then relying on QVariant to convert it to a QTime. The end
-effect is that the date part of the \c Date object is ignored, but the
-local timezone will be used ignoring any DST complications it may have.
+JavaScript \c Date objects. As QTime values do not contain a date component,
+one is created for the conversion only. Thus, you should not rely on the date
+component of the resulting Date object.
+Under the hood, conversion from a JavaScript \c Date object to QTime is done by
+converting to a QDateTime object and calling its \l {QDateTime::}{time()}
+method.
\section2 Sequence Type to JavaScript Array
diff --git a/src/qml/doc/src/qtqml-cpp.qdoc b/src/qml/doc/src/qtqml-cpp.qdoc
index 971bb88825..2c4d2a5ade 100644
--- a/src/qml/doc/src/qtqml-cpp.qdoc
+++ b/src/qml/doc/src/qtqml-cpp.qdoc
@@ -36,10 +36,12 @@ following directive:
\snippet code/doc_src_qtqml.cpp 0
+\if !defined(qtforpython)
To link against the module, add this line to your \l qmake \c
.pro file:
\snippet code/doc_src_qtqml.pro 0
+\endif
For more information on the Qt QML module, see the
\l{Qt QML} module documentation.
diff --git a/src/qml/parser/qqmljsast.cpp b/src/qml/parser/qqmljsast.cpp
index b8c4a58a13..d254279cbf 100644
--- a/src/qml/parser/qqmljsast.cpp
+++ b/src/qml/parser/qqmljsast.cpp
@@ -503,6 +503,28 @@ void NumericLiteralPropertyName::accept0(Visitor *visitor)
visitor->endVisit(this);
}
+namespace {
+struct LocaleWithoutZeroPadding : public QLocale
+{
+ LocaleWithoutZeroPadding()
+ : QLocale(QLocale::C)
+ {
+ setNumberOptions(QLocale::OmitLeadingZeroInExponent | QLocale::OmitGroupSeparator);
+ }
+};
+}
+
+QString NumericLiteralPropertyName::asString()const
+{
+ // Can't use QString::number here anymore as it does zero padding by default now.
+
+ // In C++11 this initialization is thread-safe (6.7 [stmt.dcl] p4)
+ static LocaleWithoutZeroPadding locale;
+ // Because of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83562 we can't use thread_local
+ // for the locale variable and therefore rely on toString(double) to be thread-safe.
+ return locale.toString(id, 'g', 16);
+}
+
void ArrayMemberExpression::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h
index 2cf2bcb736..07999404b4 100644
--- a/src/qml/parser/qqmljsast_p.h
+++ b/src/qml/parser/qqmljsast_p.h
@@ -870,7 +870,7 @@ public:
void accept0(Visitor *visitor) override;
- QString asString() const override { return QString::number(id, 'g', 16); }
+ QString asString() const override;
// attributes
double id;
diff --git a/src/quick/doc/images/flickable-contentXY-bottom-left.png b/src/quick/doc/images/flickable-contentXY-bottom-left.png
new file mode 100644
index 0000000000..47d3be4625
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-bottom-left.png
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-bottom-left.svgz b/src/quick/doc/images/flickable-contentXY-bottom-left.svgz
new file mode 100644
index 0000000000..db86262d74
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-bottom-left.svgz
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-bottom-right.png b/src/quick/doc/images/flickable-contentXY-bottom-right.png
new file mode 100644
index 0000000000..eb9eff24c5
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-bottom-right.png
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-bottom-right.svgz b/src/quick/doc/images/flickable-contentXY-bottom-right.svgz
new file mode 100644
index 0000000000..088c1bdf1e
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-bottom-right.svgz
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-resting.png b/src/quick/doc/images/flickable-contentXY-resting.png
new file mode 100644
index 0000000000..11bde53da5
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-resting.png
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-resting.svgz b/src/quick/doc/images/flickable-contentXY-resting.svgz
new file mode 100644
index 0000000000..c8ac118048
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-resting.svgz
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-top-left.png b/src/quick/doc/images/flickable-contentXY-top-left.png
new file mode 100644
index 0000000000..de3d11d283
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-top-left.png
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-top-left.svgz b/src/quick/doc/images/flickable-contentXY-top-left.svgz
new file mode 100644
index 0000000000..bcb6476cd2
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-top-left.svgz
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-top-right.png b/src/quick/doc/images/flickable-contentXY-top-right.png
new file mode 100644
index 0000000000..7f4a16bde1
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-top-right.png
Binary files differ
diff --git a/src/quick/doc/images/flickable-contentXY-top-right.svgz b/src/quick/doc/images/flickable-contentXY-top-right.svgz
new file mode 100644
index 0000000000..32b721cb6b
--- /dev/null
+++ b/src/quick/doc/images/flickable-contentXY-top-right.svgz
Binary files differ
diff --git a/src/quick/doc/src/guidelines/qtquick-bestpractices.qdoc b/src/quick/doc/src/guidelines/qtquick-bestpractices.qdoc
index f27f87e743..c8bdfa28cd 100644
--- a/src/quick/doc/src/guidelines/qtquick-bestpractices.qdoc
+++ b/src/quick/doc/src/guidelines/qtquick-bestpractices.qdoc
@@ -59,20 +59,19 @@ custom control.
\li \l{Qt Quick}
\endlist
+\omit
\section1 Keep it Short and Simple or "KiSS"
QML being a declarative language, a lot of the details are worked out by the underlying
engine. So it is important for any QML application, especially one with a
larger codebase, to have its code organized in smaller and simpler \c .qml files.
-\omit
-need a few snippet or example applications that showcase this.
+TODO: need a few snippet or example applications that showcase this.
\endomit
-\section2 Related Information
-\list
- \li \l{QML Coding Conventions}
-\endlist
+\section1 Coding Conventions
+
+See \l{QML Coding Conventions}.
\section1 Bundle Application Resources
@@ -338,8 +337,9 @@ must be considered while using them:
\section2 Dos
\list
- \li Use anchors or the item's width and height properties to specify the size
- of the layout against its parent.
+ \li Use \l {Item::}{anchors} or the \l {Item::}{width} and \l {Item::}{height}
+ properties to specify the size of the layout against its non-layout parent
+ item.
\li Use the \l Layout attached property to set the size and alignment
attributes of the layout's immediate children.
\endlist
@@ -347,12 +347,10 @@ must be considered while using them:
\section2 Don'ts
\list
- \li Do not rely on anchors to specify the preferred size of an item in a layout.
- Instead, use \c Layout.preferredWidth and \c Layout.preferredHeight.
\li Do not define preferred sizes for items that provide implicitWidth and
implicitHeight, unless their implicit sizes are not satisfactory.
- \li Do not mix anchors and layouts in ways that cause conflicts. For example,
- do not apply anchor constraints to a layout's immediate children.
+ \li Do not use anchors on an item that is an immediate child of a layout.
+ Instead, use \c Layout.preferredWidth and \c Layout.preferredHeight:
\snippet qml/windowconstraints.qml rowlayout
\endlist
@@ -369,6 +367,36 @@ properties are enough.
\li \l{Qt Quick Layouts Overview}
\endlist
+\section1 Type Safety
+
+When declaring properties in QML, it's easy and convenient to use the "var" type:
+
+\code
+property var name
+property var size
+property var optionsMenu
+\endcode
+
+However, this approach has several disadvantages:
+\list
+ \li If a value with the wrong type is assigned, the error reported will point
+ to the location of the property declaration, as opposed to the location
+ where the property was assigned to. This slows down the development
+ process by making it more difficult to track down errors.
+ \li Static anaylsis to catch errors like the ones mentioned above is not
+ possible.
+ \li The actual underlying type of the property is not always immediately clear
+ to the reader.
+\endlist
+
+Instead, always use the actual type where possible:
+
+\code
+property string name
+property int size
+property MyMenu optionsMenu
+\endcode
+
\section1 Performance
For information on performance in QML and Qt Quick,
@@ -420,7 +448,7 @@ on the display resolution on offer.
\section2 Related Information
\list
- \li \l{Qt Quick Controls 2 - Gallery Example}{Gallery example}
+ \li \l{Qt Quick Controls 2 - Gallery}{Gallery example}
\li \l{Qt Quick Controls 2 - Text Editor}{Text Editor example}
\li \l{Font Awesome}
\li \l{Scalability}
diff --git a/src/quick/doc/src/includes/item.qdocinc b/src/quick/doc/src/includes/item.qdocinc
new file mode 100644
index 0000000000..12472cb928
--- /dev/null
+++ b/src/quick/doc/src/includes/item.qdocinc
@@ -0,0 +1,6 @@
+//! [mapping]
+
+The following properties of the item are used in the mapping:
+\l x, \l y, \l scale, \l rotation, \l transformOrigin, and \l [QML]{Item::}{transform}.
+
+//! [mapping]
diff --git a/src/quick/doc/src/qtquick-cpp.qdoc b/src/quick/doc/src/qtquick-cpp.qdoc
index ca6fe3d0c0..8a1ab915f2 100644
--- a/src/quick/doc/src/qtquick-cpp.qdoc
+++ b/src/quick/doc/src/qtquick-cpp.qdoc
@@ -38,10 +38,12 @@
\snippet code/doc_src_qtquick.cpp 0
+ \if !defined(qtforpython)
To link against the module, add this line to your \l qmake \c
.pro file:
\snippet code/doc_src_qtquick.pro 0
+ \endif
For more information on the Qt Quick module, see the
\l{Qt Quick} module documentation.
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp
index 5a3db5e1eb..b47d055ca4 100644
--- a/src/quick/items/qquickflickable.cpp
+++ b/src/quick/items/qquickflickable.cpp
@@ -633,6 +633,31 @@ void QQuickFlickablePrivate::updateBeginningEnd()
\c contentItem that are relevant. For example, the bound of Items added
to the Flickable will be available by \c contentItem.childrenRect
+ \section1 Examples of contentX and contentY
+
+ The following images demonstrate a flickable being flicked in various
+ directions and the resulting \l contentX and \l contentY values.
+ The blue square represents the flickable's content, and the black
+ border represents the bounds of the flickable.
+
+ \table
+ \row
+ \li \image flickable-contentXY-resting.png
+ \li The \c contentX and \c contentY are both \c 0.
+ \row
+ \li \image flickable-contentXY-top-left.png
+ \li The \c contentX and the \c contentY are both \c 50.
+ \row
+ \li \image flickable-contentXY-top-right.png
+ \li The \c contentX is \c -50 and the \c contentY is \c 50.
+ \row
+ \li \image flickable-contentXY-bottom-right.png
+ \li The \c contentX and the \c contentY are both \c -50.
+ \row
+ \li \image flickable-contentXY-bottom-left.png
+ \li The \c contentX is \c 50 and the \c contentY is \c -50.
+ \endtable
+
\section1 Limitations
\note Due to an implementation detail, items placed inside a Flickable
@@ -738,7 +763,7 @@ QQuickFlickable::~QQuickFlickable()
for the position; another way is to use the normalized values in
\l {QtQuick::Flickable::visibleArea}{visibleArea}.
- \sa originX, originY
+ \sa {Examples of contentX and contentY}, originX, originY
*/
qreal QQuickFlickable::contentX() const
{
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index b09dbdad84..c1e625ef95 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -2356,6 +2356,9 @@ void QQuickItemPrivate::updateSubFocusItem(QQuickItem *scope, bool focus)
\fn QQuickItem::QQuickItem(QQuickItem *parent)
Constructs a QQuickItem with the given \a parent.
+
+ The \c parent will be used as both the \l {setParentItem()}{visual parent}
+ and the \l QObject parent.
*/
QQuickItem::QQuickItem(QQuickItem* parent)
: QObject(*(new QQuickItemPrivate), parent)
@@ -4407,6 +4410,8 @@ void QQuickItem::polish()
item's coordinate system, to this item's coordinate system, and returns a \l point or \l rect
matching the mapped coordinate.
+ \input item.qdocinc mapping
+
If \a item is a \c null value, this maps the point or rect from the coordinate system of
the root QML view.
*/
@@ -4495,6 +4500,8 @@ QTransform QQuickItem::itemTransform(QQuickItem *other, bool *ok) const
item's coordinate system, to \a item's coordinate system, and returns a \l point or \l rect
matching the mapped coordinate.
+ \input item.qdocinc mapping
+
If \a item is a \c null value, this maps the point or rect to the coordinate system of the
root QML view.
*/
@@ -4564,6 +4571,8 @@ void QQuickItem::mapToItem(QQmlV4Function *args) const
Maps the point (\a x, \a y), which is in the global coordinate system, to the
item's coordinate system, and returns a \l point matching the mapped coordinate.
+
+ \input item.qdocinc mapping
*/
/*!
\internal
@@ -4599,6 +4608,8 @@ void QQuickItem::mapFromGlobal(QQmlV4Function *args) const
Maps the point (\a x, \a y), which is in this item's coordinate system, to the
global coordinate system, and returns a \l point matching the mapped coordinate.
+
+ \input item.qdocinc mapping
*/
/*!
\internal
@@ -7701,6 +7712,8 @@ void QQuickItem::setContainmentMask(QObject *mask)
point within \a item's coordinate system, and returns the mapped
coordinate.
+ \input item.qdocinc mapping
+
If \a item is 0, this maps \a point to the coordinate system of the
scene.
@@ -7719,6 +7732,8 @@ QPointF QQuickItem::mapToItem(const QQuickItem *item, const QPointF &point) cons
point within the scene's coordinate system, and returns the mapped
coordinate.
+ \input item.qdocinc mapping
+
\sa {Concepts - Visual Coordinates in Qt Quick}
*/
QPointF QQuickItem::mapToScene(const QPointF &point) const
@@ -7732,6 +7747,8 @@ QPointF QQuickItem::mapToScene(const QPointF &point) const
point within global screen coordinate system, and returns the mapped
coordinate.
+ \input item.qdocinc mapping
+
For example, this may be helpful to add a popup to a Qt Quick component.
\note Window positioning is done by the window manager and this value is
@@ -7753,6 +7770,8 @@ QPointF QQuickItem::mapToGlobal(const QPointF &point) const
rectangular area within \a item's coordinate system, and returns the mapped
rectangle value.
+ \input item.qdocinc mapping
+
If \a item is 0, this maps \a rect to the coordinate system of the
scene.
@@ -7772,6 +7791,8 @@ QRectF QQuickItem::mapRectToItem(const QQuickItem *item, const QRectF &rect) con
rectangular area within the scene's coordinate system, and returns the mapped
rectangle value.
+ \input item.qdocinc mapping
+
\sa {Concepts - Visual Coordinates in Qt Quick}
*/
QRectF QQuickItem::mapRectToScene(const QRectF &rect) const
@@ -7785,6 +7806,8 @@ QRectF QQuickItem::mapRectToScene(const QRectF &rect) const
point within this item's coordinate system, and returns the mapped
coordinate.
+ \input item.qdocinc mapping
+
If \a item is 0, this maps \a point from the coordinate system of the
scene.
@@ -7801,6 +7824,8 @@ QPointF QQuickItem::mapFromItem(const QQuickItem *item, const QPointF &point) co
point within this item's coordinate system, and returns the mapped
coordinate.
+ \input item.qdocinc mapping
+
\sa {Concepts - Visual Coordinates in Qt Quick}
*/
QPointF QQuickItem::mapFromScene(const QPointF &point) const
@@ -7814,6 +7839,8 @@ QPointF QQuickItem::mapFromScene(const QPointF &point) const
equivalent point within this item's coordinate system, and returns the
mapped coordinate.
+ \input item.qdocinc mapping
+
For example, this may be helpful to add a popup to a Qt Quick component.
\note Window positioning is done by the window manager and this value is
@@ -7835,6 +7862,8 @@ QPointF QQuickItem::mapFromGlobal(const QPointF &point) const
rectangular area within this item's coordinate system, and returns the mapped
rectangle value.
+ \input item.qdocinc mapping
+
If \a item is 0, this maps \a rect from the coordinate system of the
scene.
@@ -7853,6 +7882,8 @@ QRectF QQuickItem::mapRectFromItem(const QQuickItem *item, const QRectF &rect) c
rectangular area within this item's coordinate system, and returns the mapped
rectangle value.
+ \input item.qdocinc mapping
+
\sa {Concepts - Visual Coordinates in Qt Quick}
*/
QRectF QQuickItem::mapRectFromScene(const QRectF &rect) const
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp
index 0de9d6c49a..f32f25a42f 100644
--- a/src/quick/items/qquickloader.cpp
+++ b/src/quick/items/qquickloader.cpp
@@ -112,6 +112,8 @@ void QQuickLoaderPrivate::clear()
q, SIGNAL(progressChanged()));
component->deleteLater();
component.setObject(nullptr, q);
+ } else if (component) {
+ component.setObject(nullptr, q);
}
source = QUrl();
@@ -437,7 +439,8 @@ void QQuickLoader::loadFromSource()
if (isComponentComplete()) {
QQmlComponent::CompilationMode mode = d->asynchronous ? QQmlComponent::Asynchronous : QQmlComponent::PreferSynchronous;
- d->component.setObject(new QQmlComponent(qmlEngine(this), d->source, mode, this), this);
+ if (!d->component)
+ d->component.setObject(new QQmlComponent(qmlEngine(this), d->source, mode, this), this);
d->load();
}
}
@@ -823,7 +826,8 @@ void QQuickLoader::componentComplete()
if (active()) {
if (d->loadingFromSource) {
QQmlComponent::CompilationMode mode = d->asynchronous ? QQmlComponent::Asynchronous : QQmlComponent::PreferSynchronous;
- d->component.setObject(new QQmlComponent(qmlEngine(this), d->source, mode, this), this);
+ if (!d->component)
+ d->component.setObject(new QQmlComponent(qmlEngine(this), d->source, mode, this), this);
}
d->load();
}
diff --git a/src/quick/items/qquickrendercontrol.cpp b/src/quick/items/qquickrendercontrol.cpp
index b06b0821d2..86a64cdeeb 100644
--- a/src/quick/items/qquickrendercontrol.cpp
+++ b/src/quick/items/qquickrendercontrol.cpp
@@ -385,7 +385,8 @@ QImage QQuickRenderControl::grab()
cd->syncSceneGraph();
d->rc->endSync();
render();
- grabContent = qt_gl_read_framebuffer(d->window->size() * d->window->effectiveDevicePixelRatio(), false, false);
+ const bool alpha = d->window->format().alphaBufferSize() > 0 && d->window->color().alpha() < 255;
+ grabContent = qt_gl_read_framebuffer(d->window->size() * d->window->effectiveDevicePixelRatio(), alpha, alpha);
if (QQuickRenderControl::renderWindowFor(d->window)) {
grabContent.setDevicePixelRatio(d->window->effectiveDevicePixelRatio());
}
diff --git a/src/quick/util/qquicktransition.cpp b/src/quick/util/qquicktransition.cpp
index c8699426f2..ad451c8f8b 100644
--- a/src/quick/util/qquicktransition.cpp
+++ b/src/quick/util/qquicktransition.cpp
@@ -211,6 +211,7 @@ QQuickTransitionInstance::QQuickTransitionInstance(QQuickTransition *transition,
QQuickTransitionInstance::~QQuickTransitionInstance()
{
+ stop();
removeStateChangeListener();
delete m_anim;
}