【问题标题】:Is it possible to know whenever an item in a tree has been renamed?是否可以知道树中的项目何时被重命名?
【发布时间】:2019-04-03 20:57:18
【问题描述】:

我正在使用 QTreeWidget。我允许用户重命名树中的项目。然而,每当一个项目被重命名时,我都必须在后台管理一些东西。所以我需要弄清楚用户何时重命名一个项目。我见过插槽“ItemChanged”,但我不知道这个插槽是否仅在重命名项目时使用。

这是我如何将项目设置为可重命名的。

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

【问题讨论】:

标签: c++ qt qtreewidget qtreewidgetitem


【解决方案1】:

只要项目中任何角色的数据发生变化,就会发出itemChanged 信号。这包括当Qt::DisplayRole 因用户编辑名称而更改时,或者当您调用QTreeWidgetItem::setData 时。它也会在其他一些情况下发出,例如标志更改以及启用/禁用项目时。

如果您只想知道名称何时更改,则可以直接连接到底层模型的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!");
});

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2011-05-13
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多