Можно ли знать, когда элемент дерева был переименован? - PullRequest
0 голосов
/ 03 апреля 2019

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

Вот как я могу установить элемент как пригодный для использования.

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

1 Ответ

0 голосов
/ 04 апреля 2019

Сигнал 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!");
});
...