Для правильного удаления нескольких элементов из массива или списка надо пользоваться итераторами. Другими методами (например, простым циклом с индексом) сделать такое удаление будет очень проблематично.
В Qt есть два вида итераторов: с доступом на чтение и с доступом на чтение-запись. Первые называются так:
QVectorIterator
QListIterator
А вторые называются так:
QMutableVectorIterator
QMutableListIterator
То есть, устрашающее слово Mutable в названии говорит лишь о том, что элемент, на который будет указывать итератор, может изменяться или даже удаляться. Ничего сверхестественного такое название не предполагает.
Теперь пример кода, который все объясняет. В коде задается массив, массив обходится, и из него удаляются элементы со значениями 20, 40, 70.
QVector<int> a;
a << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90;
qDebug() << a;
QMutableVectorIterator<int> i(a);
while(i.hasNext()) {
int currentValue=i.next();
qDebug() << currentValue;
if(currentValue==20)
i.remove();
if(currentValue==40)
i.remove();
if(currentValue==70)
i.remove();
}
qDebug() << a;
Вывод этого кода будет таким:
QVector(0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
0
10
20
30
40
50
60
70
80
90
QVector(0, 10, 30, 50, 60, 80, 90)
Видно, что элементы корректно удалились.