diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 7f958dc28d4..d3b41d2b1c2 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -37,12 +37,18 @@ struct QJniArrayIterator using pointer = T *; using reference = T; // difference to container requirements using const_reference = reference; - using iterator_category = std::bidirectional_iterator_tag; + using iterator_category = std::random_access_iterator_tag; const_reference operator*() const { return m_array->at(m_index); } + + const_reference operator[](difference_type n) const + { + return m_array->at(m_index + n); + } + friend QJniArrayIterator &operator++(QJniArrayIterator &that) noexcept { ++that.m_index; diff --git a/src/corelib/kernel/qjniarray.qdoc b/src/corelib/kernel/qjniarray.qdoc index a9ae15fa6ad..e24b4eeb9c4 100644 --- a/src/corelib/kernel/qjniarray.qdoc +++ b/src/corelib/kernel/qjniarray.qdoc @@ -328,7 +328,7 @@ /*! \typedef QJniArray::const_iterator - A bi-directional, const iterator for QJniArray. + A random-access, const iterator for QJniArray. */ /*! diff --git a/tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp b/tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp index 37b632b6349..8425448e79a 100644 --- a/tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp +++ b/tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp @@ -251,6 +251,9 @@ void tst_QJniArray::operators() QCOMPARE(*it, 'd'); it = array.size() - it; QCOMPARE(*it, 'c'); + + QCOMPARE(it[1], 'd'); + QCOMPARE(it[-1], 'b'); } { auto it = array.rbegin();