From d973907f6e4aae492dfad3eaad6827ffdc49962b Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 15 Oct 2018 14:35:15 +0200 Subject: TableView: connect to 'layoutChanged' signal from the model Ensure we rebuild the table when the model emits 'layoutChanged'. Fixes: QTBUG-71140 Change-Id: I70dac897830bf5a12ae6987920e388743fd358a1 Reviewed-by: Shawn Rutledge --- .../quick/qquicktableview/tst_qquicktableview.cpp | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'tests/auto/quick/qquicktableview/tst_qquicktableview.cpp') diff --git a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp index 38789fd7bf..d475ef9c4d 100644 --- a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp +++ b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp @@ -141,6 +141,7 @@ private slots: void flickOvershoot(); void checkRowColumnCount(); void modelSignals(); + void checkModelSignalsUpdateLayout(); void dataChangedSignal(); void checkThatPoolIsDrainedWhenReuseIsFalse(); void checkIfDelegatesAreReused_data(); @@ -1472,6 +1473,44 @@ void tst_QQuickTableView::modelSignals() QCOMPARE(tableView->columns(), 1); } +void tst_QQuickTableView::checkModelSignalsUpdateLayout() +{ + // Check that if the model rearranges rows and emit the + // 'layoutChanged' signal, TableView will be updated correctly. + LOAD_TABLEVIEW("plaintableview.qml"); + + TestModel model(0, 1); + tableView->setModel(QVariant::fromValue(&model)); + WAIT_UNTIL_POLISHED; + + QCOMPARE(tableView->rows(), 0); + QCOMPARE(tableView->columns(), 1); + + QString modelRow1Text = QStringLiteral("firstRow"); + QString modelRow2Text = QStringLiteral("secondRow"); + model.insertRow(0); + model.insertRow(0); + model.setModelData(QPoint(0, 0), QSize(1, 1), modelRow1Text); + model.setModelData(QPoint(0, 1), QSize(1, 1), modelRow2Text); + WAIT_UNTIL_POLISHED; + + QCOMPARE(tableView->rows(), 2); + QCOMPARE(tableView->columns(), 1); + + QString delegate1text = tableViewPrivate->loadedTableItem(QPoint(0, 0))->item->property("modelDataBinding").toString(); + QString delegate2text = tableViewPrivate->loadedTableItem(QPoint(0, 1))->item->property("modelDataBinding").toString(); + QCOMPARE(delegate1text, modelRow1Text); + QCOMPARE(delegate2text, modelRow2Text); + + model.swapRows(0, 1); + WAIT_UNTIL_POLISHED; + + delegate1text = tableViewPrivate->loadedTableItem(QPoint(0, 0))->item->property("modelDataBinding").toString(); + delegate2text = tableViewPrivate->loadedTableItem(QPoint(0, 1))->item->property("modelDataBinding").toString(); + QCOMPARE(delegate1text, modelRow2Text); + QCOMPARE(delegate2text, modelRow1Text); +} + void tst_QQuickTableView::dataChangedSignal() { // Check that bindings to the model inside a delegate gets updated -- cgit v1.2.3