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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Переопределение клавиш  (Прочитано 4667 раз)
irv
Гость
« : Ноябрь 30, 2011, 08:06 »

Такой вопрос.
По умолчанию, pushButton при клике реагирует на пробел. Как переопределить на Enter?
Я пытался использовать setShortcut, но это работает только для одной кнопки, а мне нужно
чтобы на Enter реагировали все кнопки, вместо пробела.
И как сделать, чтобы одна кнопка сразу была "в фокусе", а по не нажатию клавиши TAB.

Заранее спасибо за помощь.
Записан
Bepec
Гость
« Ответ #1 : Ноябрь 30, 2011, 08:57 »

1) Наследоваться от QPushButton и переопределить для этого класса keyReleaseEvent ( QKeyEvent * ).
НО.
Поясни как это
Цитировать
при клике реагирует на пробел
.

Если на кнопке стоит фокус, то Enter точно так же как и пробел работает.


2) применить к нужной кнопке слот setFocus()
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Ноябрь 30, 2011, 09:02 »

попробуй ещё поиграться свойствами default и autoDefault кнопок.

если так ничего и не получится, то можно использовать такой "хак": переопредели protected метод своей формы:
Код
C++ (Qt)
void MyForm::keyPressEvent(QKeyEvent *event)
{
   if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) // нажат энтер обычный или на нампаде
   {
       QWidget *focusWidget = qApp->focusWidget();
       QList<QPushButton *> buttons = QList<QPushButton *>() << myButton1 << myButton2 << ... ; // этот список можно и как член класса хранить
       foreach (QPushButton *button, buttons)
           if (button == focusWidget)
           {
               button->click();
               break;
           }
   }
   else // не уверен нужен ли тут элс
       MyFormSuperClass::keyPressEvent(event);
}
Записан

Изучением 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
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 30, 2011, 09:05 »

Если для всех, то
Код
C++ (Qt)
QPushButton *button = qobject_cast <QPushButton*> (qApp->focusWidget());
if (button) {
   button->click();
}
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
irv
Гость
« Ответ #4 : Ноябрь 30, 2011, 11:36 »

Проблема решена. Еще раз всем спасибо за помощь.
Записан
Bepec
Гость
« Ответ #5 : Ноябрь 30, 2011, 12:15 »

ААА переименовать тему в [РЕШЕНО]?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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