是否可以知道树中的项何时被重命名?

时间:2019-04-03 20:57:18

标签: c++ qt qtreewidget qtreewidgetitem

我正在使用QTreeWidget。我允许用户重命名树中的项目。但是,无论何时重命名项目,我都必须在后台进行管理。所以我需要弄清楚用户何时重命名项目。我已经看到了“ ItemChanged”插槽,但我不知道是否仅在重命名项目时才使用此插槽。

这是我将项目设置为可重命名的方式。

default_item->setSelected(true);
default_item->setFlags(default_item->flags() | Qt::ItemIsEditable);

1 个答案:

答案 0 :(得分:0)

每当项目中的任何角色的数据发生更改时,都会发出itemChanged信号。其中包括Qt::DisplayRole因用户编辑名称而更改的时间,或您致电QTreeWidgetItem::setData的时间。在其他情况下,例如标志更改以及启用/禁用该项时,也会发出该信号。

如果只想更改名称,则可以直接连接到基础模型的dataChanged信号,并检查roles参数的Qt::DisplayRole角色。例如:

connect(treeWidget->model(), &QAbstractItemModel::dataChanged,
[](const QModelIndex &index, const QModelIndex &, const QVector<int> &roles) {
  if (roles.contains(Qt::DisplayRole))
    qDebug("Display role changed!");
});