本页内容

QHashIterator Class

template <typename Key, typename T> class QHashIterator

QHashIterator 类为 `QHash ` 和 `QMultiHash` 提供了 Java 风格的 const 迭代器。更多内容...

头文件: #include <QHashIterator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共函数

QHashIterator(const QHash<Key, T> &hash)
bool findNext(const T &value)
bool hasNext() const
const Key &key() const
QHashIterator<Key, T>::Item next()
QHashIterator<Key, T>::Item peekNext() const
void toBack()
void toFront()
const T &value() const
QHashIterator<Key, T> &operator=(const QHash<Key, T> &hash)

详细说明

QHash 同时支持Java 风格的迭代器和 STL 风格的迭代器。STL 风格的迭代器效率更高,建议优先使用。模板参数Key 指定哈希表的键类型,T 指定值类型。

QHashIterator<Key, T> 允许您遍历QHash (或QMultiHash )。如果您希望在遍历哈希时对其进行修改,请改用QMutableHashIterator 。

QHashIterator 的构造函数接受一个QHash 作为参数。构造完成后,迭代器位于哈希表的最前端(第一个元素之前)。以下是按顺序遍历所有元素的方法:

QHash<int,QWidget*>hash;
//...
QHashIterator<int,QWidget*>i(hash);
while(i.hasNext()) {
    i.next();
    qDebug() << i.key() << ": " << i.value();
}

next() 函数返回哈希表中的下一个元素,并使迭代器向前移动。key() 和value() 函数分别返回被跳过的上一个元素的键和值。

与 STL 风格的迭代器不同,Java 风格的迭代器指向元素之间而非直接指向元素本身。首次调用next() 会将迭代器移动到第一个和第二个元素之间的位置,并返回第一个元素;第二次调用next() 会将迭代器移动到第二个和第三个元素之间的位置;以此类推。

在元素 A、B、C、D 之间的迭代器位置

若要查找某个特定值的所有出现位置,请在循环中使用findNext()。例如:

QHashIterator<int,QWidget*>i(hash);
while(i.findNext(widget)) {
    qDebug() << "Found widget " << widget << " under key "
           <<i.key();
}

同一个哈希表上可以使用多个迭代器。如果在 QHashIterator 处于活动状态时哈希表被修改,该 QHashIterator 将继续遍历原始哈希表,而忽略被修改的副本。

另请参阅 QMutableHashIterator 和QHash::const_iterator 。

成员函数文档

QHashIterator::QHashIterator(const QHash<Key, T> &hash)

构建一个用于遍历hash 的迭代器。该迭代器被设置为位于哈希表的开头(第一个元素之前)。

另请参阅 operator=()。

bool QHashIterator::findNext(const T &value)

从当前迭代器位置开始向前搜索value 。如果找到了值为value 的(key, value)键值对,则返回true ;否则返回false 。

调用完成后,如果找到了value ,迭代器将定位在匹配项的紧后方;否则,迭代器将定位在容器的末尾。

bool QHashIterator::hasNext() const

如果迭代器前方至少还有一个元素,即迭代器未位于容器的末尾,则返回true ;否则返回false 。

另请参阅 next()。

const Key &QHashIterator::key() const

返回使用其中一个遍历函数(next()、findNext())跳过后的最后一个项的键。

另请参阅 value()。

QHashIterator<Key, T>::Item QHashIterator::next()

返回下一个项目,并将迭代器向前移动一个位置。

调用返回值的 `key()` 方法可获取该项的键,调用 `value()` 方法可获取其值。

在位于容器末尾的迭代器上调用此函数会导致未定义的结果。

另请参阅 hasNext() 和peekNext()。

QHashIterator<Key, T>::Item QHashIterator::peekNext() const

返回下一个项目,同时不移动迭代器。

调用返回值的 `key()` 可获取该项的键,调用 `value()` 可获取其值。

在位于容器末尾的迭代器上调用此函数将导致未定义的结果。

另请参阅 hasNext() 和next()。

void QHashIterator::toBack()

将迭代器移至容器末尾(最后一个元素之后)。

另请参阅 toFront()。

void QHashIterator::toFront()

将迭代器移动到容器的最前端(第一个元素之前)。

另请参阅 toBack() 和next()。

const T &QHashIterator::value() const

返回使用其中一个遍历函数(next()、findNext())跳过的最后一个项的值。

另请参阅 key()。

QHashIterator<Key, T> &QHashIterator::operator=(const QHash<Key, T> &hash)

使迭代器在hash 上运行。迭代器被设置为位于哈希表的开头(第一个元素之前)。

另请参阅 toFront() 和toBack()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.