diff --git a/src/corelib/itemmodels/qabstractproxymodel.cpp b/src/corelib/itemmodels/qabstractproxymodel.cpp index 2d1df46b451..83e8cb8db3c 100644 --- a/src/corelib/itemmodels/qabstractproxymodel.cpp +++ b/src/corelib/itemmodels/qabstractproxymodel.cpp @@ -55,6 +55,13 @@ void QAbstractProxyModelPrivate::_q_sourceModelDestroyed() model = QAbstractItemModelPrivate::staticEmptyModel(); } +static auto emitHeaderDataChanged(QAbstractItemModel *model, + Qt::Orientation orientation, + int count) +{ + return [=](){ emit model->headerDataChanged(orientation, 0, count); }; +} + void QAbstractProxyModelPrivate::_q_sourceModelRowsAboutToBeInserted(const QModelIndex &parent, int, int) { if (parent.isValid()) @@ -70,7 +77,7 @@ void QAbstractProxyModelPrivate::_q_sourceModelRowsInserted(const QModelIndex &p Q_Q(QAbstractProxyModel); const int columnCount = q->columnCount(); if (columnCount > 0) - emit q->headerDataChanged(Qt::Horizontal, 0, columnCount - 1); + QMetaObject::invokeMethod(q, emitHeaderDataChanged(q, Qt::Horizontal, columnCount - 1), Qt::QueuedConnection); } } @@ -83,7 +90,7 @@ void QAbstractProxyModelPrivate::_q_sourceModelRowsRemoved(const QModelIndex &pa Q_Q(QAbstractProxyModel); const int columnCount = q->columnCount(); if (columnCount > 0) - emit q->headerDataChanged(Qt::Horizontal, 0, columnCount - 1); + QMetaObject::invokeMethod(q, emitHeaderDataChanged(q, Qt::Horizontal, columnCount - 1), Qt::QueuedConnection); } } @@ -102,7 +109,7 @@ void QAbstractProxyModelPrivate::_q_sourceModelColumnsInserted(const QModelIndex Q_Q(QAbstractProxyModel); const int rowCount = q->rowCount(); if (rowCount > 0) - emit q->headerDataChanged(Qt::Vertical, 0, rowCount - 1); + QMetaObject::invokeMethod(q, emitHeaderDataChanged(q, Qt::Vertical, rowCount - 1), Qt::QueuedConnection); } } @@ -114,7 +121,7 @@ void QAbstractProxyModelPrivate::_q_sourceModelColumnsRemoved(const QModelIndex Q_Q(QAbstractProxyModel); const int rowCount = q->rowCount(); if (rowCount > 0) - emit q->headerDataChanged(Qt::Vertical, 0, rowCount - 1); + QMetaObject::invokeMethod(q, emitHeaderDataChanged(q, Qt::Vertical, rowCount - 1), Qt::QueuedConnection); } } diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp index 3136c1f24f3..4a9606d345e 100644 --- a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp @@ -225,7 +225,7 @@ void tst_QAbstractProxyModel::headerDataInBounds() QCOMPARE(proxy.rowCount(), 1); QCOMPARE(proxy.columnCount(), 5); - QCOMPARE(headerDataChangedSpy.size(), 1); + QTRY_COMPARE(headerDataChangedSpy.size(), 1); QCOMPARE(headerDataChangedSpy[0][0].value(), Qt::Horizontal); QCOMPARE(headerDataChangedSpy[0][1].value(), 0); QCOMPARE(headerDataChangedSpy[0][2].value(), 4); @@ -266,7 +266,7 @@ void tst_QAbstractProxyModel::headerDataInBounds() QCOMPARE(proxy.rowCount(), 0); QCOMPARE(proxy.columnCount(), 5); - QCOMPARE(headerDataChangedSpy.size(), 2); + QTRY_COMPARE(headerDataChangedSpy.size(), 2); QCOMPARE(headerDataChangedSpy[1][0].value(), Qt::Horizontal); QCOMPARE(headerDataChangedSpy[1][1].value(), 0); QCOMPARE(headerDataChangedSpy[1][2].value(), 4);