crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

skmdeveloper
  опции профиля:
сообщение 7.5.2011, 21:33
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 18.9.2009
Пользователь №: 1107

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня класс унаследованный от QTableView.
После редактирования значения активной становится следующая ячейка - справа, а на последнем столбце в насале следующей строки.

Есть ли возможность, чтобы текущая ячейка не менялась? В документации не нашёл.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 8)
MoPDoBoPoT
  опции профиля:
сообщение 7.5.2011, 23:03
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Это нестандартное поведение. Почитай про QAbstractItemView::closeEditor() и QAbstractItemDelegate::EndEditHint.

Сообщение отредактировал MoPDoBoPoT - 7.5.2011, 23:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Lappu
  опции профиля:
сообщение 10.5.2011, 2:26
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 30.3.2011
Пользователь №: 2558

Спасибо сказали: 0 раз(а)




Репутация:   0  


Этим хозяйством заведует делегат твоего представления.
Событие окончания редактирования определяется нажатием клавиш клавиатуры и мыши. Обработкой событий занимается виртуальная функция QObject::eventFilter(). Она переопределяется в классе делегата и задает обработку по умолчанию.
Непосредственно сам процесс редактирования заканчивается посылом сигнала
void QAbstractItemDelegate::closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint = NoHint )

Тебя интересует второй параметр hint. Он определяет каким образом закончить редактирования. Вот возможные варианты:
QAbstractItemDelegate::NoHint 0 There is no recommended action to be performed.
QAbstractItemDelegate::EditNextItem 1 The view should use the delegate to open an editor on the next item in the view.
QAbstractItemDelegate::EditPreviousItem 2 The view should use the delegate to open an editor on the previous item in the view.
...
Наследуй класс от QItemDelegate (или QAbstractItemDelegate, или QStyledItemDelegate), переопредели функцию eventFilter, создав свой обработчик событий.
(Посмотри пример реализации bool QItemDelegate::eventFilter(QObject *object, QEvent *event) в исходниках.)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.5.2011, 6:47
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Iron Lappu @ 10.5.2011, 5:26) *
наследуй класс от QItemDelegate (или QAbstractItemDelegate, или QStyledItemDelegate), переопредели функцию eventFilter, создав свой обработчик событий.
фильтр событий для того и придуман, чтобы не наследоваться. (подробности в описании метода QObject::eventFilter())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Lappu
  опции профиля:
сообщение 10.5.2011, 16:24
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 30.3.2011
Пользователь №: 2558

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 10.5.2011, 7:47) *
Цитата(Iron Lappu @ 10.5.2011, 5:26) *
наследуй класс от QItemDelegate (или QAbstractItemDelegate, или QStyledItemDelegate), переопредели функцию eventFilter, создав свой обработчик событий.
фильтр событий для того и придуман, чтобы не наследоваться. (подробности в описании метода QObject::eventFilter())

Да, фильтр событий для того и придуман, чтобы объект имел возможность проводить обработку событий других объектов и тем самым эти другие элементы не надо было наследовать. Но я ведь не предлагаю наследовать каждый виджет редактирования (и врядли это даст толку), а наследоваться от делегата.
Конечно, можно использовать, к примеру, производный класс представления, который регистрирует себя функцией installEventFilter() в качестве перехватчика событий своего делегата и тем самым в функции eventFilter() за него обрабатывает события, но это уже другая история...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.5.2011, 17:05
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


фильтр событий можно повесить где угодно, например в виджете-окне.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Lappu
  опции профиля:
сообщение 10.5.2011, 17:41
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 30.3.2011
Пользователь №: 2558

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 10.5.2011, 18:05) *
фильтр событий можно повесить где угодно, например в виджете-окне.

Но где-то же надо? :)
Кстати, Litkevich Yuriy, скажите пожалуйста, почему я не могу изменить свои личные данные? Выдает "Вам запрещено использование этой функции форума". Хотел написать вам личное сообщение, но все то же.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
skmdeveloper
  опции профиля:
сообщение 13.5.2011, 0:40
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 18.9.2009
Пользователь №: 1107

Спасибо сказали: 0 раз(а)




Репутация:   0  


Выяснилось что после окончания редактирования ячейки в QTabView генерируется нажатие клавиши Tab, чтобы перейти на следующую ячейку. Перехватил

void MyView::keyPressEvent(QKeyEvent * e) {
if (e->key() == Qt::Key_Tab) {
        if (focusWidget() != this) return;
    }
QTableView::keyPressEvent(e);
}


Некошерно, но работает. Перемещение нажатием клавиши Tab функционирует.

Сообщение отредактировал skmdeveloper - 13.5.2011, 7:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.5.2011, 7:38
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Iron Lappu @ 10.5.2011, 20:41) *
Кстати, Litkevich Yuriy, скажите пожалуйста, почему я не могу изменить свои личные данные? Выдает "Вам запрещено использование этой функции форума". Хотел написать вам личное сообщение, но все то же.
20 полезных сообщений и у вас автоматом появится такая возможность
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 22.6.2025, 1:48