Russian Qt Forum

Qt => Общие вопросы => Тема начата: Rododendron от Январь 11, 2018, 16:08



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


Название: Re: Как сделать QTreeView редактируемым?
Отправлено: ViTech от Январь 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), он, по-хорошему, вообще знать ничего не должен.


Название: Re: Как сделать QTreeView редактируемым?
Отправлено: Rododendron от Январь 12, 2018, 09:46
Спасибо. Открыл проект с этим примером, и стало понятно. Я не сразу понял, что функция flags - это перегруженная функция.
Еще раз прихожу к выводу, что лучшая документация - это код.