Russian Qt Forum
Июнь 21, 2018, 17:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать QTreeView редактируемым?  (Прочитано 780 раз)
Rododendron
Новичок

Offline Offline

Сообщений: 22


Просмотр профиля
« : Январь 11, 2018, 16:08 »

У меня есть QTreeView и модель, наследованная от QAbstractItemModel.
Мне нужно добавить возможность редактирования этого дерева. Нигде нет этого параметру IsEditable. Нужно, чтобы по второму клику итем открывался для редактирования. Всякие там добавить или удалить итем понятно, как сделать.
Смотрел этот пример и не понял ничего: http://doc.qt.io/Qt-5/qtwidgets-itemviews-editabletreemodel-example.html
Там есть функция flags, которая возвращает Editable, но как это прикрутить к модели или к вьюверу? У них нет флагов, и у итема тоже.
Записан
ViTech
Бывалый
*****
Offline Offline

Сообщений: 448



Просмотр профиля
« Ответ #1 : Январь 11, 2018, 19:41 »

Смотрел этот пример и не понял ничего: http://doc.qt.io/Qt-5/qtwidgets-itemviews-editabletreemodel-example.html
Там есть функция flags, которая возвращает Editable, но как это прикрутить к модели или к вьюверу? У них нет флагов, и у итема тоже.

В примере считается, что все TreeItem могут редактироваться, поэтому в этом классе ничего нет про Editable. Может элемент редактироваться или нет, фактически определяется в методе TreeModel::flags(). В примере, опять же, добавляют флаг Qt::ItemIsEditable для всех элементов, но в этом месте можно самому решать, какой элемент может редактироваться, а какой нет. Либо по полю в TreeItem (его нужно добавить), либо по каким-то другим признакам. Вид (QAbstractItemView) определяет редактируемость элемента запрашивая у модели flag с его индексом. Далее копайте в сторону TreeModel::data(), TreeModel::setData() и роли Qt::DisplayRole и Qt::EditRole. Вид должен общаться только с моделью, про элемент (TreeItem), он, по-хорошему, вообще знать ничего не должен.
Записан

Пока сам не сделаешь...
Rododendron
Новичок

Offline Offline

Сообщений: 22


Просмотр профиля
« Ответ #2 : Январь 12, 2018, 09:46 »

Спасибо. Открыл проект с этим примером, и стало понятно. Я не сразу понял, что функция flags - это перегруженная функция.
Еще раз прихожу к выводу, что лучшая документация - это код.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.048 секунд. Запросов: 22.