#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!");
});