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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Key_Enter и Key_Return для обхода элементов формы  (Прочитано 5726 раз)
nixman05
Гость
« : Март 06, 2012, 21:06 »

Для обхода элементов формы используется клавиша <Enter>.
Обратный обход происходит при зажатой клавише <Alt>.
Для этого переопределен метод keyPressEvent().

Код
C++ (Qt)
   if ( ( event->modifiers() == Qt::AltModifier ) &&
       ((event->key()==Qt::Key_Enter)||(event->key()==Qt::Key_Return)) ){
           //this->focusNextPrevChild(false);
           QCoreApplication::sendEvent(this,new QKeyEvent(QEvent::KeyPress,Qt::Key_Tab,Qt::ShiftModifier));
           qDebug("alt return pressed");
 
   } else /*if ( event->modifiers() == Qt::NoModifier )*/ {
       if ((event->key()==Qt::Key_Enter)||(event->key()==Qt::Key_Return)){
           //this->focusNextPrevChild(true);
           QCoreApplication::sendEvent(this,new QKeyEvent(QEvent::KeyPress,Qt::Key_Tab,Qt::NoModifier));
           qDebug("return pressed");
       }
   }
 

По обоим энтерам происходит передача фокуса к следующему элементу формы.
Если  зажат <Alt> и нажимается <Enter> на буквенной клавиатуре то происходит передача фокуса предыдущему элементу формы. Но если нажимается <Enter> на нумпаде, то фокус передается к следующему элементу формы, независимо от нажатия клавиши <Alt>.
Почему так происходит и как это устранить.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Март 06, 2012, 23:44 »

Enter на цифровой клавиатуре определяется следующим образом:
Код:
(pEvent->modifiers() == Qt::KeypadModifier) && ((pEvent->key() == Qt::Key_Return) || (pEvent->key() == Qt::Key_Return))
может все-таки в одном из условий должен стоять Qt::Key_Enter? Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #2 : Март 06, 2012, 23:48 »

key_return  и есть enter насколько я помню. А так могу посоветовать смотреть по скан коду. А не по константам Qt.
Записан
twp
Гость
« Ответ #3 : Март 07, 2012, 00:56 »

Код
C++ (Qt)
if ( ( event->modifiers() & Qt::AltModifier ) &&
...
 
« Последнее редактирование: Март 07, 2012, 11:05 от twp » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #4 : Март 07, 2012, 01:09 »

& тогда уж
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
twp
Гость
« Ответ #5 : Март 07, 2012, 01:35 »

& тогда уж
это ж равносильно == как у ТС
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #6 : Март 07, 2012, 02:52 »

если нажать больше одного модификатора вместе с нужным, то == вернет фолс, а & - тру. | же всегда будет возвращать тру вне зависимости от реальных модификаторов, поскольку Qt::AltModifier имеет ненулевое значение.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
twp
Гость
« Ответ #7 : Март 07, 2012, 11:05 »

если нажать больше одного модификатора вместе с нужным, то == вернет фолс, а & - тру. | же всегда будет возвращать тру вне зависимости от реальных модификаторов, поскольку Qt::AltModifier имеет ненулевое значение.
Да, это я спутал с суммированием флагов, исправил
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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