Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: nixman05 от Март 06, 2012, 21:06



Название: Key_Enter и Key_Return для обхода элементов формы
Отправлено: 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>.
Почему так происходит и как это устранить.


Название: Re: Key_Enter и Key_Return для обхода элементов формы
Отправлено: kambala от Март 06, 2012, 23:44
Enter на цифровой клавиатуре определяется следующим образом:
Код:
(pEvent->modifiers() == Qt::KeypadModifier) && ((pEvent->key() == Qt::Key_Return) || (pEvent->key() == Qt::Key_Return))
может все-таки в одном из условий должен стоять Qt::Key_Enter? :)


Название: Re: Key_Enter и Key_Return для обхода элементов формы
Отправлено: Bepec от Март 06, 2012, 23:48
key_return  и есть enter насколько я помню. А так могу посоветовать смотреть по скан коду. А не по константам Qt.


Название: Re: Key_Enter и Key_Return для обхода элементов формы
Отправлено: twp от Март 07, 2012, 00:56
Код
C++ (Qt)
if ( ( event->modifiers() & Qt::AltModifier ) &&
...
 


Название: Re: Key_Enter и Key_Return для обхода элементов формы
Отправлено: kambala от Март 07, 2012, 01:09
& тогда уж


Название: Re: Key_Enter и Key_Return для обхода элементов формы
Отправлено: twp от Март 07, 2012, 01:35
& тогда уж
это ж равносильно == как у ТС


Название: Re: Key_Enter и Key_Return для обхода элементов формы
Отправлено: kambala от Март 07, 2012, 02:52
если нажать больше одного модификатора вместе с нужным, то == вернет фолс, а & - тру. | же всегда будет возвращать тру вне зависимости от реальных модификаторов, поскольку Qt::AltModifier имеет ненулевое значение.


Название: Re: Key_Enter и Key_Return для обхода элементов формы
Отправлено: twp от Март 07, 2012, 11:05
если нажать больше одного модификатора вместе с нужным, то == вернет фолс, а & - тру. | же всегда будет возвращать тру вне зависимости от реальных модификаторов, поскольку Qt::AltModifier имеет ненулевое значение.
Да, это я спутал с суммированием флагов, исправил