Возможно ли узнать, когда элемент в дереве был переименован?

#c #qt #qtreewidget #qtreewidgetitem

#c #qt #qtreewidget #qtreewidgetitem

Вопрос:

Я использую QTreeWidget. Я разрешил пользователю переименовывать элементы в дереве. Тем не менее, всякий раз, когда элемент переименовывается, я должен управлять чем-то в фоновом режиме. Итак, мне нужно выяснить, когда пользователь переименовывает элемент. Я видел слот «itemChanged», но я не знаю, используется ли этот слот только при переименовании элемента.

вот как я устанавливаю элемент как переименуемый.

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

Комментарии:

1. Предполагая, что он использует TVN_ITEMCHANGED ( learn.microsoft.com/en-us/windows/desktop/controls / … ), тогда он должен использоваться для всех свойств.

Ответ №1:

itemChanged Сигнал выдается всякий раз, когда данные изменяются для любой из ролей в элементе. Это включает в себя, когда Qt::DisplayRole изменяется из-за того, что пользователь отредактировал имя, или когда вы вызываете QTreeWidgetItem::setData . Это также выдается в некоторых других случаях, например, при смене флагов и при включении / отключении элемента.

Если вы хотите знать только, когда меняется имя, тогда вы можете напрямую подключиться к dataChanged сигналу базовой модели и проверить roles аргумент для Qt::DisplayRole роли. Например:

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