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 &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()));