Russian Qt Forum
Ноябрь 24, 2024, 10:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Переход в режим редактирования по одиночному нажатию баз выделения ячейки  (Прочитано 6368 раз)
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, поведение правилное, но при этом ячейка закрашивается фоном выделения.
Как сделать постоянный переход в редактирование одиночным нажатием и чтобы при этом в таблице ячейка не выделялась?
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #1 : Декабрь 14, 2009, 11:43 »

Посмотри внимательно вот эту тему http://www.prog.org.ru/topic_10428_0.html

там последним сообщением автор Barmaglodd приводит пример делегата внутри которого не создается createEditor и он работает по одинарному клику - я точно не понял подойдет ли тебе но по идее это оно!
Записан
igor_bogomolov
Гость
« Ответ #2 : Декабрь 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.

Костыль конечно, но другого решения я не вижу. Если есть более правильное решения, буду очень рад услышать  Улыбающийся
Записан
Kolobok
Гость
« Ответ #3 : Декабрь 17, 2009, 20:11 »

... и чтобы при этом в таблице ячейка не выделялась?

может QPalette::Highlight прозрачной сделать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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