Russian Qt Forum

Qt => Вопросы новичков => Тема начата: bekor от Апрель 16, 2012, 11:16



Название: Нажатие PushButton с клавиатуры
Отправлено: bekor от Апрель 16, 2012, 11:16
нужно чтобы при нажатии определенной кнопки на клаве вызивался метод pushbuttin->press()
а при отпускании pushbutton->release()

подскажите пожалуйста как это реализовать


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: mutineer от Апрель 16, 2012, 11:24
при обработке нажатия кнопки на клаве вызываешь
void QAbstractButton::click () [slot]


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: bekor от Апрель 16, 2012, 12:00
а как писать этот обработчик ?
нужно ли подключить какую то библиотеку для клавиатуры ?

p.s. мне нужен не click а нажатие и отпускание по отдельности


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: Пантер от Апрель 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


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: bekor от Апрель 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 ???


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: bekor от Апрель 16, 2012, 22:18
Разобрался  8)
надо было просто убрать фокус с кнопки.
ui->pushButton->setFocusPolicy(Qt::NoFocus);

Спасибо за подсказки...


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: bekor от Апрель 18, 2012, 10:38
по ходу есть еще одна проблема,
если нажать и удерживать клавишу то спустя одну секунду
постоянно происходит событие нажатия кнопки (как в текстовом редакторе)

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


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: Странник от Апрель 18, 2012, 10:50
по ходу есть еще одна проблема,
если нажать и удерживать клавишу то спустя одну секунду
постоянно происходит событие нажатия кнопки (как в текстовом редакторе)

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


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: GreatSnake от Апрель 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");
   }
}


Название: Re: Нажатие PushButton с клавиатуры
Отправлено: bekor от Апрель 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();
}