Russian Qt Forum

Qt => Model-View (MV) => Тема начата: igor_bogomolov от Декабрь 14, 2009, 01:57



Название: Переход в режим редактирования по одиночному нажатию баз выделения ячейки
Отправлено: igor_bogomolov от Декабрь 14, 2009, 01:57
Приветствую всех.
Имею QTableView + QStandardItenModel + QAbstractItemDelegate. В каждой из ячеек в таблице должен находиться некий виджет. Строк у меня много, поэтому использовать QAbstractItemView::setIndexWidget слишком накладно. Cоздал набор делегатов, которые имитируют поведение этих виджетов.
Все вреде хорошо, за исключением маленькой мелочи. Для делегата имитирующего QLineEdit нужно одиночным нажатием переходить в режим редактирования.
Для этого выставляю следующие флаги.
Код
C++ (Qt)
   tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
   tableView->setSelectionMode(QAbstractItemView::NoSelection);
   tableView->setEditTriggers(QAbstractItemView::AllEditTriggers);
После выхода из режима редактирования , что бы снова в него войти (для той же самой ячейки), необходим DoubleClicked. Как то это не кашерно. Если закомментировать setSelectionMode, поведение правилное, но при этом ячейка закрашивается фоном выделения.
Как сделать постоянный переход в редактирование одиночным нажатием и чтобы при этом в таблице ячейка не выделялась?
(http://pic.ipicture.ru/uploads/091214/NAACRUAXbX.png)


Название: Re: Переход в режим редактирования по одиночному нажатию баз выделения ячейки
Отправлено: break от Декабрь 14, 2009, 11:43
Посмотри внимательно вот эту тему http://www.prog.org.ru/topic_10428_0.html

там последним сообщением автор Barmaglodd приводит пример делегата внутри которого не создается createEditor и он работает по одинарному клику - я точно не понял подойдет ли тебе но по идее это оно!


Название: Re: Переход в режим редактирования по одиночному нажатию баз выделения ячейки
Отправлено: igor_bogomolov от Декабрь 14, 2009, 13:15
Посмотри внимательно вот эту тему http://www.prog.org.ru/topic_10428_0.html

там последним сообщением автор Barmaglodd приводит пример делегата внутри которого не создается createEditor и он работает по одинарному клику - я точно не понял подойдет ли тебе но по идее это оно!

Я видел эту тему и пример о котором вы говорите.
Для делегатов имитирующих QCheckBox и QPushButton не нужен режим редактирования. Для их реализации достаточно перекрыть  QAbstractItemDelegate::paint и  QAbstractItemDelegate::editorEvent .
Для имитации LineEdit-а необходимо переходить в режим редактирования. Тут то и начинаются проблемы...

Но на самом деле проблему я уже решил. Изначально просто зациклился и пытался решить проблему именно через делегат. К сожалению, если сохранять поведение MouseOver, или требуется поведение как я описал в первом посте, одним делегатом не обойтись. Пришлось делать свое отображение. Перекрыл mousePressEvent, и вызываю для требуемой ячейки openPersistentEditor. В делегате, когда это необходимо, добираюсь до отображения и делаю  closePersistentEditor.

Костыль конечно, но другого решения я не вижу. Если есть более правильное решения, буду очень рад услышать  :)


Название: Re: Переход в режим редактирования по одиночному нажатию баз выделения ячейки
Отправлено: Kolobok от Декабрь 17, 2009, 20:11
... и чтобы при этом в таблице ячейка не выделялась?

может QPalette::Highlight прозрачной сделать.