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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt GUI - необходимо управлять работой кнопок с клавиатуры. Как?  (Прочитано 4168 раз)
idov
Гость
« : Январь 25, 2013, 10:00 »

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

focus : const bool;
isChecked();

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

PS больше конкретики и фактов и ваш велосипед обрастёт новыми колёсными парами.
Записан
lighting
Гость
« Ответ #2 : Январь 25, 2013, 10:04 »

Если я правильно понял вопрос то вот http://doc.qt.digia.com/qt/qapplication.html#focusWidget
Записан
idov
Гость
« Ответ #3 : Январь 25, 2013, 10:11 »

focus : const bool;
isChecked();

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

PS больше конкретики и фактов и ваш велосипед обрастёт новыми колёсными парами.
Спасибо за совет, буду посмотреть.
А что именно необходимо - чтобы если фокус на паре QDial-QProgressBar, то ничего бы не делалось, а если фокус находится на QPushButton - чтобы отрабатывал какой-нибудь слот.
А так - неслужебные клавиши отрабатывают по event-перехвату, Tab де-факто меняет значение фокуса, но в обработке event не всплывает, а Enter ловится - но я не знаю, какая кнопка активна, чтобы кому-то передать управление.
Записан
idov
Гость
« Ответ #4 : Январь 25, 2013, 15:25 »

Большое спасибо всем помогавшим.
Проблема решена с вашей помощью, оказалось, что при отработке event c Qt::Key_Enter | Key_Return
достаточно проверить  if (focusWidget() == buttonN)  -- если по Enter попали с фокусом тут, значит кнопка потенциально активна. Можно обрабатывать.
Еще раз большое спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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