diff options
4 files changed, 39 insertions, 3 deletions
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index af87f56255..758ac4bba6 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -1108,7 +1108,27 @@ void QAbstractItemModel::resetInternalData() Returns the sibling at \a row and \a column. If there is no sibling at this position, an invalid QModelIndex is returned. - \sa parent() + \sa parent(), siblingAtColumn(), siblingAtRow() +*/ + +/*! + \fn QModelIndex QModelIndex::siblingAtColumn(int column) const + + Returns the sibling at \a column for the current row. If there is no sibling + at this position, an invalid QModelIndex is returned. + + \sa sibling(), siblingAtRow() + \since 5.11 +*/ + +/*! + \fn QModelIndex QModelIndex::siblingAtRow(int row) const + + Returns the sibling at \a row for the current column. If there is no sibling + at this position, an invalid QModelIndex is returned. + + \sa sibling(), siblingAtColumn() + \since 5.11 */ /*! diff --git a/src/corelib/itemmodels/qabstractitemmodel.h b/src/corelib/itemmodels/qabstractitemmodel.h index 621f284c34..fca21b9bbc 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.h +++ b/src/corelib/itemmodels/qabstractitemmodel.h @@ -63,6 +63,8 @@ public: inline void *internalPointer() const Q_DECL_NOTHROW { return reinterpret_cast<void*>(i); } inline QModelIndex parent() const; inline QModelIndex sibling(int row, int column) const; + inline QModelIndex siblingAtColumn(int column) const; + inline QModelIndex siblingAtRow(int row) const; #if QT_DEPRECATED_SINCE(5, 8) QT_DEPRECATED_X("Use QAbstractItemModel::index") inline QModelIndex child(int row, int column) const; #endif @@ -436,6 +438,12 @@ inline QModelIndex QModelIndex::parent() const inline QModelIndex QModelIndex::sibling(int arow, int acolumn) const { return m ? (r == arow && c == acolumn) ? *this : m->sibling(arow, acolumn, *this) : QModelIndex(); } +inline QModelIndex QModelIndex::siblingAtColumn(int acolumn) const +{ return m ? (c == acolumn) ? *this : m->sibling(r, acolumn, *this) : QModelIndex(); } + +inline QModelIndex QModelIndex::siblingAtRow(int arow) const +{ return m ? (r == arow) ? *this : m->sibling(arow, c, *this) : QModelIndex(); } + #if QT_DEPRECATED_SINCE(5, 8) inline QModelIndex QModelIndex::child(int arow, int acolumn) const { return m ? m->index(arow, acolumn, *this) : QModelIndex(); } diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp index 6c870737da..886941bff6 100644 --- a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp @@ -477,8 +477,8 @@ void tst_QAbstractProxyModel::testSwappingRowsProxy() for (int row = 0; row < defaultModel.rowCount(); ++row) { QModelIndex left = proxy.index(row, 0, QModelIndex()); QModelIndex right = proxy.index(row, 1, QModelIndex()); - QCOMPARE(left.sibling(left.row(), 1), right); - QCOMPARE(right.sibling(right.row(), 0), left); + QCOMPARE(left.siblingAtColumn(1), right); + QCOMPARE(right.siblingAtColumn(0), left); } } diff --git a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp index 3d9446965e..7cd220e684 100644 --- a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp +++ b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp @@ -428,6 +428,14 @@ void checkChildren(QAbstractItemModel *currentModel, const QModelIndex &parent, const QModelIndex sibling = topLeftChild.sibling( r, c ); QVERIFY( index == sibling ); } + if (r == topLeftChild.row()) { + const QModelIndex sibling = topLeftChild.siblingAtColumn( c ); + QVERIFY( index == sibling ); + } + if (c == topLeftChild.column()) { + const QModelIndex sibling = topLeftChild.siblingAtRow( r ); + QVERIFY( index == sibling ); + } // Some basic checking on the index that is returned QCOMPARE(index.model(), currentModel); |