QTreeWidgetItem: pass role to dataChanged() signal
QAbstractItemModel::dataChanged() gained an optional role parameter with Qt5 which was not filled within QTreeWidgetItem setData() function Change-Id: Ife87e9e046621b464ad340bd9eb451355730e93c Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This commit is contained in:
parent
f9fa3e2553
commit
85f6dd8325
@ -777,7 +777,7 @@ bool QTreeModel::isChanging() const
|
||||
if column is -1 then all columns have changed
|
||||
*/
|
||||
|
||||
void QTreeModel::emitDataChanged(QTreeWidgetItem *item, int column)
|
||||
void QTreeModel::emitDataChanged(QTreeWidgetItem *item, int column, const QVector<int> &roles)
|
||||
{
|
||||
if (signalsBlocked())
|
||||
return;
|
||||
@ -800,7 +800,7 @@ void QTreeModel::emitDataChanged(QTreeWidgetItem *item, int column)
|
||||
topLeft = index(item, column);
|
||||
bottomRight = topLeft;
|
||||
}
|
||||
emit dataChanged(topLeft, bottomRight);
|
||||
emit dataChanged(topLeft, bottomRight, roles);
|
||||
}
|
||||
|
||||
void QTreeModel::beginInsertItems(QTreeWidgetItem *parent, int row, int count)
|
||||
@ -1766,11 +1766,14 @@ void QTreeWidgetItem::setData(int column, int role, const QVariant &value)
|
||||
}
|
||||
|
||||
if (model) {
|
||||
model->emitDataChanged(this, column);
|
||||
const QVector<int> roles((role == Qt::DisplayRole || role == Qt::EditRole) ?
|
||||
QVector<int>({Qt::DisplayRole, Qt::EditRole}) :
|
||||
QVector<int>({role}));
|
||||
model->emitDataChanged(this, column, roles);
|
||||
if (role == Qt::CheckStateRole) {
|
||||
QTreeWidgetItem *p;
|
||||
for (p = par; p && (p->itemFlags & Qt::ItemIsAutoTristate); p = p->par)
|
||||
model->emitDataChanged(p, column);
|
||||
model->emitDataChanged(p, column, roles);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -339,6 +339,7 @@ Q_SIGNALS:
|
||||
void itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||
void itemActivated(QTreeWidgetItem *item, int column);
|
||||
void itemEntered(QTreeWidgetItem *item, int column);
|
||||
// ### Qt 6: add changed roles
|
||||
void itemChanged(QTreeWidgetItem *item, int column);
|
||||
void itemExpanded(QTreeWidgetItem *item);
|
||||
void itemCollapsed(QTreeWidgetItem *item);
|
||||
|
@ -139,7 +139,7 @@ public:
|
||||
|
||||
protected:
|
||||
QTreeModel(QTreeModelPrivate &, QTreeWidget *parent = 0);
|
||||
void emitDataChanged(QTreeWidgetItem *item, int column);
|
||||
void emitDataChanged(QTreeWidgetItem *item, int column, const QVector<int> &roles);
|
||||
void beginInsertItems(QTreeWidgetItem *parent, int row, int count);
|
||||
void endInsertItems();
|
||||
void beginRemoveItems(QTreeWidgetItem *parent, int row, int count);
|
||||
|
@ -1938,23 +1938,38 @@ void tst_QTreeWidget::setData()
|
||||
}
|
||||
}
|
||||
|
||||
class QTreeWidgetDataChanged : public QTreeWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
using QTreeWidget::QTreeWidget;
|
||||
|
||||
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) override
|
||||
{
|
||||
QTreeWidget::dataChanged(topLeft, bottomRight, roles);
|
||||
currentRoles = roles;
|
||||
}
|
||||
QVector<int> currentRoles;
|
||||
};
|
||||
|
||||
void tst_QTreeWidget::itemData()
|
||||
{
|
||||
QTreeWidget widget;
|
||||
QTreeWidgetDataChanged widget;
|
||||
QTreeWidgetItem item(&widget);
|
||||
widget.setColumnCount(2);
|
||||
item.setFlags(item.flags() | Qt::ItemIsEditable);
|
||||
item.setData(0, Qt::DisplayRole, QString("0"));
|
||||
QCOMPARE(widget.currentRoles, QVector<int>({Qt::DisplayRole, Qt::EditRole}));
|
||||
item.setData(0, Qt::CheckStateRole, Qt::PartiallyChecked);
|
||||
item.setData(0, Qt::UserRole + 0, QString("1"));
|
||||
item.setData(0, Qt::UserRole + 1, QString("2"));
|
||||
item.setData(0, Qt::UserRole + 2, QString("3"));
|
||||
item.setData(0, Qt::UserRole + 3, QString("4"));
|
||||
|
||||
QCOMPARE(widget.currentRoles, {Qt::CheckStateRole});
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
item.setData(0, Qt::UserRole + i, QString::number(i + 1));
|
||||
QCOMPARE(widget.currentRoles, {Qt::UserRole + i});
|
||||
}
|
||||
QMap<int, QVariant> flags = widget.model()->itemData(widget.model()->index(0, 0));
|
||||
QCOMPARE(flags.count(), 6);
|
||||
QCOMPARE(flags[Qt::UserRole + 0].toString(), QString("1"));
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
QCOMPARE(flags[Qt::UserRole + i].toString(), QString::number(i + 1));
|
||||
flags = widget.model()->itemData(widget.model()->index(0, 1));
|
||||
QCOMPARE(flags.count(), 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user