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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нажатие PushButton с клавиатуры  (Прочитано 6360 раз)
bekor
Гость
« : Апрель 16, 2012, 11:16 »

нужно чтобы при нажатии определенной кнопки на клаве вызивался метод pushbuttin->press()
а при отпускании pushbutton->release()

подскажите пожалуйста как это реализовать
Записан
mutineer
Гость
« Ответ #1 : Апрель 16, 2012, 11:24 »

при обработке нажатия кнопки на клаве вызываешь
void QAbstractButton::click () [slot]
Записан
bekor
Гость
« Ответ #2 : Апрель 16, 2012, 12:00 »

а как писать этот обработчик ?
нужно ли подключить какую то библиотеку для клавиатуры ?

p.s. мне нужен не click а нажатие и отпускание по отдельности
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #3 : Апрель 16, 2012, 12:14 »

http://doc-snapshot.qt-project.org/4.8/qwidget.html#keyReleaseEvent
http://doc-snapshot.qt-project.org/4.8/qwidget.html#keyPressEvent
Записан

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

Код:
void MainWindow::keyPressEvent(QKeyEvent* event)
{
    if(event->key()==Qt::Key_W)
    {
        ui->label->setText("Pressed");
    }
}
void MainWindow::keyReleaseEvent(QKeyEvent* event)
{
    if(event->key()==Qt::Key_W)
    {
        ui->label->setText("Released");
    }
}

вот так работает но есть одна проблема,
если в место Key_W например писать Key_Left то работает только keyReleaseEvent Непонимающий
Записан
bekor
Гость
« Ответ #5 : Апрель 16, 2012, 22:18 »

Разобрался  Крутой
надо было просто убрать фокус с кнопки.
ui->pushButton->setFocusPolicy(Qt::NoFocus);

Спасибо за подсказки...
Записан
bekor
Гость
« Ответ #6 : Апрель 18, 2012, 10:38 »

по ходу есть еще одна проблема,
если нажать и удерживать клавишу то спустя одну секунду
постоянно происходит событие нажатия кнопки (как в текстовом редакторе)

как сделать так чтобы при нажатии и удержании клавиши событие нажатия вызивалась только
один раз ?
и то же самое для отпускания
Записан
Странник
Гость
« Ответ #7 : Апрель 18, 2012, 10:50 »

по ходу есть еще одна проблема,
если нажать и удерживать клавишу то спустя одну секунду
постоянно происходит событие нажатия кнопки (как в текстовом редакторе)

как сделать так чтобы при нажатии и удержании клавиши событие нажатия вызивалась только
один раз ?
и то же самое для отпускания
добавь флаг нажатия на клавишу. устанавливай при keyPressEvent, очищай при keyReleaseEvent. игнорируй все keyPressEvent, если флаг установлен.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Апрель 18, 2012, 10:51 »

Код
C++ (Qt)
void MainWindow::keyPressEvent(QKeyEvent* event)
{
   if( !pressed_ && event->key()==Qt::Key_W)
   {
       pressed_ = true;
       ui->label->setText("Pressed");
   }
}
void MainWindow::keyReleaseEvent(QKeyEvent* event)
{
   if(event->key()==Qt::Key_W)
   {
       pressed_ = false;
       ui->label->setText("Released");
   }
}
Записан

Qt 5.11/4.8.7 (X11/Win)
bekor
Гость
« Ответ #9 : Апрель 18, 2012, 11:05 »

Я тоже пробовал с флагом но флаг тут не катит так как оба Release и Press постоянно происходят
но я уже решил проблему Улыбающийся

вот так
Код
C++ (Qt)
void MainWindow::keyPressEvent(QKeyEvent* event)
{
   if(event->key()==Qt::Key_Q && !event->isAutoRepeat())
       on_LeftDriveButton_pressed();
   if(event->key()==Qt::Key_W && !event->isAutoRepeat())
       on_RightDriveButton_pressed();
}
 
void MainWindow::keyReleaseEvent(QKeyEvent* event)
{
   if(event->key()==Qt::Key_Q && !event->isAutoRepeat())
       on_LeftDriveButton_released();
   if(event->key()==Qt::Key_W && !event->isAutoRepeat())
       on_RightDriveButton_released();
}
« Последнее редактирование: Апрель 18, 2012, 11:07 от bekor » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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