QMapIterator
类为QMap
和QMultiMap
提供了一个java样式的const迭代器。
QMap
有java风格的迭代器和STL样式的迭代器两种。与STL样式的迭代器相比,java风格的迭代器更高级,更容易使用;另一方面,他们的效率稍微低一些
QMapIterator< Key,t>
迭代器允许你遍历QMap
对象(或QMultiMap
对象)。如果您想在迭代过程中修改对象,则使用QMutableMapIterator //The QMutableMapIterator class provides a Java-style non-const iterator for QMap and QMultiMap.。
QMapIterator
构造函数采用QMap
作为参数。在构建之后,迭代器位于map的最开始部分(在第一个项之前)。
QMap<int,QWidget*>map;
...
QMapIterator<int,QWidget*> i(map);
while(i.hasNext()){
i.next();
qDebug() << i.key() << ":" << i.value();
}
Item QMapIterator::next() //返回下一个项,将迭代器推进到下一个位置。
bool QMapIterator::hasNext() const //如果在迭代器后面至少存在一个项,则返回ture。否则返回false
与STL样式的迭代器不同,java风格的迭代器指向项而不是直接指向项。第一次调用next()将迭代器推进到第一和第二项之间的位置,并返回第一个项;第二次调用next()将迭代器推进到第二和第三项之间的位置;一直下去
如何按照相反的顺序迭代元素:
QMapIterator<int,QWidget*> i(map);
i.toBack();
while (i.hasPrevious()) {
i.previous();
qDebug() << i.key() << ": " << i.value();
}
如果您想查找某个特定值的所有出现,使用函数 findNext()
或findPrevious()
。例如:
QMapIterator<int, QWidget *> i(map);
while (i.findNext(widget)) {
qDebug() << "Found widget " << widget << " under key "
<< i.key();
}