Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: idov от Январь 25, 2013, 10:00



Название: Qt GUI - необходимо управлять работой кнопок с клавиатуры. Как?
Отправлено: idov от Январь 25, 2013, 10:00
Есть программа на С++ под Qt GUI.
Небольшое окошко, в нем по вертикали несколько кнопок(QPushButton) и несколько пар QDial-QProgressBar.
Управление от мыша было налажено сразу и без проблем, но необходимо управление от клавиатуры.
Когда запускаю программу, вижу, как от табуляции смещается фокус от элемента к элементу.
При этом, когда фокус на паре QDial-QProgressBar, отлично идет изменение значений по стрелочкам (стрелка вправо, или вверх - увеличение значения, стрелка влево или вниз - уменьшение значения).
Когда фокус переходит на кнопки - я тоже вижу, что цвет кнопки изменился. Но программно понять, на какой именно из кнопок я стою - не могу. Попытка задействовать event  провалилась, табуляция почему-то не обрабатывается, keyPressEvent вообще ничего не ловит.
В обработке event зато отлавливается Enter/Return и неслужебные клавиши тоже попадает на обработку.
А вместо TAB, arrowLeft и пр. - попадаются event'ы paint и repaint, сами клавиши обрабатываются где-то под программой, на более низком уровне(?).
Если кто знает, как можно, обращаясь к элементу QPushButton узнать - стоит ли на нем фокус, или отмечена ли как-то эта кнопка - прошу помочь.


Название: Re: Qt GUI - необходимо управлять работой кнопок с клавиатуры. Как?
Отправлено: Bepec от Январь 25, 2013, 10:03
focus : const bool;
isChecked();

Нет пояснения какого управления вы хотите от кнопок.
Нет пояснения как помечается ваша кнопка.

PS больше конкретики и фактов и ваш велосипед обрастёт новыми колёсными парами.


Название: Re: Qt GUI - необходимо управлять работой кнопок с клавиатуры. Как?
Отправлено: lighting от Январь 25, 2013, 10:04
Если я правильно понял вопрос то вот http://doc.qt.digia.com/qt/qapplication.html#focusWidget


Название: Re: Qt GUI - необходимо управлять работой кнопок с клавиатуры. Как?
Отправлено: idov от Январь 25, 2013, 10:11
focus : const bool;
isChecked();

Нет пояснения какого управления вы хотите от кнопок.
Нет пояснения как помечается ваша кнопка.

PS больше конкретики и фактов и ваш велосипед обрастёт новыми колёсными парами.
Спасибо за совет, буду посмотреть.
А что именно необходимо - чтобы если фокус на паре QDial-QProgressBar, то ничего бы не делалось, а если фокус находится на QPushButton - чтобы отрабатывал какой-нибудь слот.
А так - неслужебные клавиши отрабатывают по event-перехвату, Tab де-факто меняет значение фокуса, но в обработке event не всплывает, а Enter ловится - но я не знаю, какая кнопка активна, чтобы кому-то передать управление.


Название: Re: Qt GUI - необходимо управлять работой кнопок с клавиатуры. Как?
Отправлено: idov от Январь 25, 2013, 15:25
Большое спасибо всем помогавшим.
Проблема решена с вашей помощью, оказалось, что при отработке event c Qt::Key_Enter | Key_Return
достаточно проверить  if (focusWidget() == buttonN)  -- если по Enter попали с фокусом тут, значит кнопка потенциально активна. Можно обрабатывать.
Еще раз большое спасибо.