summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp22
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.h8
-rw-r--r--tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp4
-rw-r--r--tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp8
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);