QListWidgetItem constructors: don't emit dataChanged(invalid, invalid)

This is a regression introduced by 63967313f57add which blocked signals
on the view, but not on the model.

Change-Id: Ib2f93fe6ef842264aaba200c98ee4a19065ca220
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Konstantin Shegunov <kshegunov@gmail.com>
Reviewed-by: Laurent Montel <laurent.montel@kdab.com>
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
This commit is contained in:
David Faure 2019-04-15 21:07:40 +02:00
parent 20e2861073
commit ed66c932b1
2 changed files with 13 additions and 5 deletions

View File

@ -650,11 +650,13 @@ QListWidgetItem::QListWidgetItem(const QString &text, QListWidget *listview, int
|Qt::ItemIsEnabled |Qt::ItemIsEnabled
|Qt::ItemIsDragEnabled) |Qt::ItemIsDragEnabled)
{ {
QListModel *model = listModel();
{ {
QSignalBlocker b(view); QSignalBlocker b(view);
QSignalBlocker bm(model);
setData(Qt::DisplayRole, text); setData(Qt::DisplayRole, text);
} }
if (QListModel *model = listModel()) if (model)
model->insert(model->rowCount(), this); model->insert(model->rowCount(), this);
} }
@ -683,12 +685,14 @@ QListWidgetItem::QListWidgetItem(const QIcon &icon,const QString &text,
|Qt::ItemIsEnabled |Qt::ItemIsEnabled
|Qt::ItemIsDragEnabled) |Qt::ItemIsDragEnabled)
{ {
QListModel *model = listModel();
{ {
QSignalBlocker b(view); QSignalBlocker b(view);
QSignalBlocker bm(model);
setData(Qt::DisplayRole, text); setData(Qt::DisplayRole, text);
setData(Qt::DecorationRole, icon); setData(Qt::DecorationRole, icon);
} }
if (QListModel *model = listModel()) if (model)
model->insert(model->rowCount(), this); model->insert(model->rowCount(), this);
} }

View File

@ -267,6 +267,7 @@ tst_QListWidget::tst_QListWidget(): testWidget(0), rcParent(8), rcFirst(8,0), rc
void tst_QListWidget::initTestCase() void tst_QListWidget::initTestCase()
{ {
qRegisterMetaType<QListWidgetItem*>("QListWidgetItem*");
testWidget = new QListWidget(); testWidget = new QListWidget();
testWidget->show(); testWidget->show();
@ -663,6 +664,9 @@ void tst_QListWidget::insertItems()
QFETCH(int, rowCount); QFETCH(int, rowCount);
QFETCH(int, insertType); QFETCH(int, insertType);
QSignalSpy itemChangedSpy(testWidget, &QListWidget::itemChanged);
QSignalSpy dataChangedSpy(testWidget->model(), &QAbstractItemModel::dataChanged);
if (insertType == 3) { if (insertType == 3) {
QStringList strings; QStringList strings;
for (int i=0; i<rowCount; ++i) for (int i=0; i<rowCount; ++i)
@ -700,6 +704,9 @@ void tst_QListWidget::insertItems()
// make sure all items have view set correctly // make sure all items have view set correctly
for (int i=0; i<testWidget->count(); ++i) for (int i=0; i<testWidget->count(); ++i)
QCOMPARE(testWidget->item(i)->listWidget(), testWidget); QCOMPARE(testWidget->item(i)->listWidget(), testWidget);
QCOMPARE(itemChangedSpy.count(), 0);
QCOMPARE(dataChangedSpy.count(), 0);
} }
void tst_QListWidget::itemAssignment() void tst_QListWidget::itemAssignment()
@ -1257,7 +1264,6 @@ void tst_QListWidget::setData()
QFETCH(IntList, roles); QFETCH(IntList, roles);
QFETCH(QVariantList, values); QFETCH(QVariantList, values);
QFETCH(int, expectedSignalCount); QFETCH(int, expectedSignalCount);
qRegisterMetaType<QListWidgetItem *>("QListWidgetItem*");
QCOMPARE(roles.count(), values.count()); QCOMPARE(roles.count(), values.count());
@ -1715,7 +1721,6 @@ void tst_QListWidget::task258949_keypressHangup()
void tst_QListWidget::QTBUG8086_currentItemChangedOnClick() void tst_QListWidget::QTBUG8086_currentItemChangedOnClick()
{ {
qRegisterMetaType<QListWidgetItem*>("QListWidgetItem*");
QWidget win; QWidget win;
QHBoxLayout layout(&win); QHBoxLayout layout(&win);
QListWidget list; QListWidget list;
@ -1837,7 +1842,6 @@ void tst_QListWidget::mimeData()
void tst_QListWidget::QTBUG50891_ensureSelectionModelSignalConnectionsAreSet() void tst_QListWidget::QTBUG50891_ensureSelectionModelSignalConnectionsAreSet()
{ {
qRegisterMetaType<QListWidgetItem*>("QListWidgetItem*");
QListWidget list; QListWidget list;
for (int i = 0 ; i < 4; ++i) for (int i = 0 ; i < 4; ++i)
new QListWidgetItem(QString::number(i), &list); new QListWidgetItem(QString::number(i), &list);