diff options
Diffstat (limited to 'src/particles')
-rw-r--r-- | src/particles/qquickparticlesystem.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/particles/qquickparticlesystem.cpp b/src/particles/qquickparticlesystem.cpp index db5d607922..be64851a19 100644 --- a/src/particles/qquickparticlesystem.cpp +++ b/src/particles/qquickparticlesystem.cpp @@ -931,19 +931,26 @@ void QQuickParticleSystem::emittersChanged() if (!m_componentComplete) return; - m_emitters.removeAll(0); - - - QList<int> previousSizes; - QList<int> newSizes; + QVector<int> previousSizes; + QVector<int> newSizes; + previousSizes.reserve(m_nextGroupId); + newSizes.reserve(m_nextGroupId); for (int i=0; i<m_nextGroupId; i++) { previousSizes << groupData[i]->size(); newSizes << 0; } - foreach (QQuickParticleEmitter* e, m_emitters) {//Populate groups and set sizes. - if (!groupIds.contains(e->group()) - || (!e->group().isEmpty() && !groupIds[e->group()])) {//or it was accidentally inserted by a failed lookup earlier + // Populate groups and set sizes. + for (int i = 0; i < m_emitters.count(); ++i) { + QQuickParticleEmitter *e = m_emitters.at(i); + if (!e) { + m_emitters.removeAt(i); + i--; + continue; + } + + if (!e->group().isEmpty() && + !groupIds.contains(e->group())) { int id = m_nextGroupId++; QQuickParticleGroupData* gd = new QQuickParticleGroupData(id, this); groupIds.insert(e->group(), id); |