Нужно запретить перемещение только некоторых итемов, остальные перемещать можно.
У меня есть Представление QTreeView и древовидная модель QStandardItemModel подключенная к представлению. Итемы в модели QStandardItem. В разных ветках дерева могут быть элементы с одинаковым именем (QStandardItem->text()) Перемещение элементов дерева из одной ветки в другую настроено и работает как надо за исключением одной вещи. Мне нужно чтобы при перемещении итема из одной ветки в другую перемещение не происходило если в конечной ветке есть итем с таким-же именем.
На данный момент мне удалось сделать следующее: при переносе элемента в ветку в которой есть итем с таким именем, я вывожу предупреждение, что перемещение невозможно, но в Представлении перемещение все равно успешно происходит и итем перемещается. Как сделать так что-бы и в Представлении итем не перемещался? А остальные итемы естественно должны перемещаться без проблем.
Я подумал, что во время перемещения мне нужно каким-то образом получить индекс модели для элемента на который я перемещаю и затем сделать его, например, неизменяемым (setEditable(false)). Но как можно было бы получить этот индекс я не знаю. Может кто-нибудь подскажет?
Может быть то что мне нужно, вообще должно реализовываться не через запрет изменения итема а как-то иначе? Подскажите.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопределенной функции dragMoveEvent()
Теперь нужно где-то сохранить QModelIndex перетаскиваемого элемента. Полагаю - это можно сделать в переопределенной функции mousePressEvent(), но пока не получается.Получилось сделать это через слот подключенный к сигналу мыши pressed