是否可以知道树中的项目何时被重命名?
Is it possible to know whenever an item in a tree has been renamed?
我正在使用 QTreeWidget。我允许用户重命名树中的项目。然而,每当重命名一个项目时,我都必须在后台管理一些东西。所以我需要弄清楚用户何时重命名一个项目。我看到了插槽"ItemChanged",但我不知道这个插槽是否仅在重命名项目时使用。
这是我将项目设置为可重命名的方法。
default_item->setSelected(true);
default_item->setFlags(default_item->flags() | Qt::ItemIsEditable);
只要项目中任何角色的数据发生变化,就会发出 itemChanged
信号。这包括当 Qt::DisplayRole
由于用户编辑名称而更改时,或者当您调用 QTreeWidgetItem::setData
时。它也会在其他一些情况下发出,例如标志更改时以及项目为 enabled/disabled.
时
如果您只想知道名称何时更改,则可以直接连接到基础模型的 dataChanged
信号并检查 Qt::DisplayRole
角色的 roles
参数.例如:
connect(treeWidget->model(), &QAbstractItemModel::dataChanged,
[](const QModelIndex &index, const QModelIndex &, const QVector<int> &roles) {
if (roles.contains(Qt::DisplayRole))
qDebug("Display role changed!");
});
我正在使用 QTreeWidget。我允许用户重命名树中的项目。然而,每当重命名一个项目时,我都必须在后台管理一些东西。所以我需要弄清楚用户何时重命名一个项目。我看到了插槽"ItemChanged",但我不知道这个插槽是否仅在重命名项目时使用。
这是我将项目设置为可重命名的方法。
default_item->setSelected(true);
default_item->setFlags(default_item->flags() | Qt::ItemIsEditable);
只要项目中任何角色的数据发生变化,就会发出 itemChanged
信号。这包括当 Qt::DisplayRole
由于用户编辑名称而更改时,或者当您调用 QTreeWidgetItem::setData
时。它也会在其他一些情况下发出,例如标志更改时以及项目为 enabled/disabled.
如果您只想知道名称何时更改,则可以直接连接到基础模型的 dataChanged
信号并检查 Qt::DisplayRole
角色的 roles
参数.例如:
connect(treeWidget->model(), &QAbstractItemModel::dataChanged,
[](const QModelIndex &index, const QModelIndex &, const QVector<int> &roles) {
if (roles.contains(Qt::DisplayRole))
qDebug("Display role changed!");
});