diff options
author | Christian Ehrlicher <[email protected]> | 2024-12-19 21:23:24 +0100 |
---|---|---|
committer | Christian Ehrlicher <[email protected]> | 2025-01-10 20:40:46 +0100 |
commit | 5bab8448feb2661f871e71d71a95afaffcb1656a (patch) | |
tree | 67563c07a3b8f0192ddf60238d61d112632b3244 | |
parent | 41a92bf6f1486259ef25db775520cba647e1cc15 (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.cpp | 3 | ||||
-rw-r--r-- | tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp | 34 |
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())); |