summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Ehrlicher <[email protected]>2024-12-19 21:23:24 +0100
committerChristian Ehrlicher <[email protected]>2025-01-10 20:40:46 +0100
commit5bab8448feb2661f871e71d71a95afaffcb1656a (patch)
tree67563c07a3b8f0192ddf60238d61d112632b3244
parent41a92bf6f1486259ef25db775520cba647e1cc15 (diff)
QStandardItem: correctly set model during insertRows()
When calling insertRows(), the model of the child items was not correctly updated. insertRow() is behaving correctly. Pick-to: 6.9 6.8 Fixes: QTBUG-131372 Change-Id: I8b6aef7ab97887c6eb46eb21b992d76e4d59b3a0 Reviewed-by: David Faure <[email protected]>
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.cpp3
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp34
2 files changed, 35 insertions, 2 deletions
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp
index 91807ef7c42..0eb64c16957 100644
--- a/src/gui/itemmodels/qstandarditemmodel.cpp
+++ b/src/gui/itemmodels/qstandarditemmodel.cpp
@@ -450,8 +450,7 @@ bool QStandardItemPrivate::insertRows(int row, const QList<QStandardItem*> &item
}
for (int i = 0; i < items.size(); ++i) {
QStandardItem *item = items.at(i);
- item->d_func()->model = model;
- item->d_func()->parent = q;
+ item->d_func()->setParentAndModel(q, model);
int index = childIndex(i + row, 0);
children.replace(index, item);
if (item)
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index ef2fd83d4ca..79b5c18e561 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -68,6 +68,7 @@ private slots:
void insertRow();
void insertRows();
void insertRowsItems();
+ void insertRowsWithChildItems();
void insertRowInHierarcy();
void insertColumn_data();
void insertColumn();
@@ -296,6 +297,39 @@ void tst_QStandardItemModel::insertRowsItems()
}
}
+void tst_QStandardItemModel::insertRowsWithChildItems()
+{
+ QStandardItemModel model;
+ auto *top = new QStandardItem("top");
+ auto *mid = new QStandardItem("mid");
+ auto *btm = new QStandardItem("bottom");
+
+ model.appendRow(top);
+ mid->appendRow(btm);
+
+ QCOMPARE(top->model(), &model);
+ QCOMPARE(mid->model(), nullptr);
+ QCOMPARE(btm->model(), nullptr);
+
+ top->appendRow(mid);
+ QCOMPARE(top->model(), &model);
+ QCOMPARE(mid->model(), &model);
+ QCOMPARE(btm->model(), &model);
+
+ auto mid2 = top->takeChild(0);
+ top->removeRow(0);
+ QCOMPARE(mid, mid2);
+ QCOMPARE(top->model(), &model);
+ QCOMPARE(mid->model(), nullptr);
+ QCOMPARE(btm->model(), nullptr);
+
+ top->appendRows({mid}); // other codepath than appendRow() above
+ QCOMPARE(top->model(), &model);
+ QCOMPARE(mid->model(), &model);
+ QCOMPARE(btm->model(), &model);
+}
+
+
void tst_QStandardItemModel::insertRowInHierarcy()
{
QVERIFY(m_model->insertRows(0, 1, QModelIndex()));