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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поймать Qt::ShiftModifier вместе с Qt::Key_Tab  (Прочитано 5483 раз)
codeLocker
Гость
« : Июнь 05, 2006, 11:22 »

Всем привет.

В классе QDialog в конструкторе устанавливаю оброботчик событий для объекта QTextEdit

Код:
textEditData->installEventFilter( this );


содержание обработчика:

Код:

bool TemplEdit::eventFilter(QObject *obj, QEvent *event){
if ( obj == textEditData && event->type() == QEvent::KeyPress ){
QKeyEvent * keyEvent = static_cast<QKeyEvent *>(event);
if ( keyEvent->modifiers() == Qt::ShiftModifier ){
if ( keyEvent->key() == Qt::Key_Tab ){
......
Выполняем обработку(1)....
......
return true;
}
}else{
if ( keyEvent->key() == Qt::Key_Tab ){
......
Выполняем обработку(2)....
......
return true;
}
}
}
return QObject::eventFilter(obj, event);
}



Так вот, при нажатии shift+tab ничего не происходит (не выполняется "Выполняем обработку(1)...."). Что я делаю не так?
Записан
zinit
Гость
« Ответ #1 : Июнь 05, 2006, 13:52 »

Qt::KeyboardModifiers QKeyEvent::modifiers () const
Returns the keyboard modifier flags that existed immediately after the event occurred.
Warning: This function cannot always be trusted. The user can confuse it by pressing both Shift keys simulatenously and releasing one of them, for example.
See also QApplication::keyboardModifiers().
Записан
codeLocker
Гость
« Ответ #2 : Июнь 05, 2006, 14:46 »

Пробовал использовать вместо
Код:
if ( keyEvent->modifiers() == Qt::ShiftModifier )

такую проверку
Код:
if ( QApplication::keyboardModifiers()  == Qt::ShiftModifier )


Но все равно, что нажат Shift видет но при проверки на Tab не работает
Код:
if ( keyEvent->key() == Qt::Key_Tab )
Записан
Sergeich
Гость
« Ответ #3 : Июнь 05, 2006, 17:51 »

Когда ты нажимаешь Shift + Tab генерится событие QEvent::KeyPress c key() == Qt::Key_Backtab Улыбающийся Кстати, в доке по QApplication::notify написано:
Цитировать
There are five different ways that events can be processed; reimplementing this virtual function is just one of them. All five approaches are listed below:
1. Reimplementing this function. This is very powerful, providing complete control; but only one subclass can be qApp.

2. Installing an event filter on qApp. Such an event filter is able to process all events for all widgets, so it's just as powerful as reimplementing notify(); furthermore, it's possible to have more than one application-global event filter. Global event filters even see mouse events for disabled widgets, and if global mouse tracking is enabled, as well as mouse move events for all widgets.

3. Reimplementing QObject::event() (as QWidget does). If you do this you get Tab key presses, and you get to see the events before any widget-specific event filters.

4. Installing an event filter on the object. Such an event filter gets all the events except Tab and Shift-Tab key presses.

5. Reimplementing paintEvent(), mousePressEvent() and so on. This is the commonest, easiest and least powerful way.

Хотя событийный фильтр прекрасно ловит нажатие Tab или Shift + Tab, по крайней мере в Qt 3.3.4 под виндой Улыбающийся
Записан
codeLocker
Гость
« Ответ #4 : Июнь 05, 2006, 22:57 »

Пробовал ловить Qt::Key_Backtab. Не выходит ничего:(.
Даже пробовал сделать класс из QTextEdit и и в
void TextEditor::keyPressEvent( QKeyEvent* e ) пробовал ловить.
Не знаю где еще искать причину


Прошу прощение, Qt::Key_Backtab - работает!
Просто первый раз проверял в полусонном состоянии
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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