Russian Qt Forum

Qt => Общие вопросы => Тема начата: rainovsky от Июнь 14, 2024, 11:08



Название: Отслеживание нажатия двух клавиш на цифровой клавиатуре одновременно
Отправлено: rainovsky от Июнь 14, 2024, 11:08
Привет читаюшим!
Накидал простой код для примера

Код:
void MainWindow::keyPressEvent(QKeyEvent *event) {
    if (event->key() == Qt::Key_1 && event->modifiers().testFlag(Qt::KeypadModifier)) {
        btn1 = true;
    } else if (event->key() == Qt::Key_2 && event->modifiers().testFlag(Qt::KeypadModifier)) {
        btn2 = true;
    }
    print();
    QMainWindow::keyPressEvent(event);
}

void MainWindow::keyReleaseEvent(QKeyEvent *event) {
    qDebug() <<"Reliased:  " << event->key();
    if (event->key() == Qt::Key_1 && event->modifiers().testFlag(Qt::KeypadModifier)) {
        btn1 = false;
    } else if (event->key() == Qt::Key_2 && event->modifiers().testFlag(Qt::KeypadModifier)) {
        btn1 = false;
    }
    print();
    QMainWindow::keyReleaseEvent(event);
}

void MainWindow::print()
{
    if(btn1 && btn2){
        label->setText("1 + 2 is pressed");
    } else if(btn2){
        label->setText("2 is pressed");
    } else if(btn1){
        label->setText("1 is pressed");
    } else {
        label->setText("No one button is pressed");
    }
}

Вопрос вот в чем.
Если нажимать по отдельности, то работает нормально. Если нажать сначала одну клавишу, предположим 1, а потом нажать 2, то показывает, что нажата только 2, и если потом отпустить 1, то вообще покажет, что никакая не нажата.
Если убать проверку
Код:
event->modifiers().testFlag(Qt::KeypadModifier)
, то на основной клавиатуре работает корректно.
Если возможность отсдслеживать нажатие двух клавиш на numpad?


Название: Re: Отслеживание нажатия двух клавиш на цифровой клавиатуре одновременно
Отправлено: Apktyc от Июнь 14, 2024, 14:20
Тред не читай @ сразу отвечай

Как минимум btn2 никогда не сбрасывается, ибо в keyReleaseEvent везде btn1 = false;