aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-01-15 15:41:29 +0300
committerAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-01-18 07:57:56 +0000
commitf644f86c84287065535fbd8c3478a5b2550437ac (patch)
tree54640dd88fa7e4cc3ce03b15d6ed3a7c2b005070 /src/quick/items
parent1cbf064cdf6d24ddbb6bf30b08a88ec1bf03d3df (diff)
Quick: fix expensive iteration over QHash::keys() and QMap::keys()
Change-Id: I21c48214bfddde01f71710705fe01418818a6581 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Diffstat (limited to 'src/quick/items')
-rw-r--r--src/quick/items/qquickdrag.cpp5
-rw-r--r--src/quick/items/qquickitemanimation.cpp9
-rw-r--r--src/quick/items/qquickmultipointtoucharea.cpp6
3 files changed, 12 insertions, 8 deletions
diff --git a/src/quick/items/qquickdrag.cpp b/src/quick/items/qquickdrag.cpp
index 279f5e5299..e44c0b216f 100644
--- a/src/quick/items/qquickdrag.cpp
+++ b/src/quick/items/qquickdrag.cpp
@@ -715,9 +715,8 @@ Qt::DropAction QQuickDragAttachedPrivate::startDrag(Qt::DropActions supportedAct
QDrag *drag = new QDrag(q);
QMimeData *mimeData = new QMimeData();
- Q_FOREACH (const QString &key, externalMimeData.keys()) {
- mimeData->setData(key, externalMimeData[key].toString().toUtf8());
- }
+ for (auto it = externalMimeData.cbegin(), end = externalMimeData.cend(); it != end; ++it)
+ mimeData->setData(it.key(), it.value().toString().toUtf8());
drag->setMimeData(mimeData);
diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp
index 9d140b3156..da577d808a 100644
--- a/src/quick/items/qquickitemanimation.cpp
+++ b/src/quick/items/qquickitemanimation.cpp
@@ -836,12 +836,13 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QQuickStateActions &actio
prevData = *d->activeAnimations[target]->pathUpdater();
}
- QList<QQuickItem*> keys = d->activeAnimations.keys();
- foreach (QQuickItem *item, keys) {
- QQuickPathAnimationAnimator *anim = d->activeAnimations.value(item);
+ for (auto it = d->activeAnimations.begin(); it != d->activeAnimations.end();) {
+ QQuickPathAnimationAnimator *anim = it.value();
if (anim->state() == QAbstractAnimationJob::Stopped) {
anim->clearTemplate();
- d->activeAnimations.remove(item);
+ it = d->activeAnimations.erase(it);
+ } else {
+ ++it;
}
}
diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp
index 9e658cc668..e3a8fe3cc6 100644
--- a/src/quick/items/qquickmultipointtoucharea.cpp
+++ b/src/quick/items/qquickmultipointtoucharea.cpp
@@ -470,7 +470,11 @@ void QQuickMultiPointTouchArea::grabGesture()
grabMouse();
setKeepMouseGrab(true);
- grabTouchPoints(_touchPoints.keys().toVector());
+ QVector<int> ids;
+ ids.reserve(_touchPoints.size());
+ for (auto it = _touchPoints.keyBegin(), end = _touchPoints.keyEnd(); it != end; ++it)
+ ids.append(*it);
+ grabTouchPoints(ids);
setKeepTouchGrab(true);
}