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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Вопросы новичков / Перехват нажатия клавиши клавиатуры, калькулятор C++ Qt 5. : Май 23, 2021, 20:37
Новичок в Qt, пишу калькулятор с возможностью ввода основных символов (цифры, +, -, . , (, ), /, *) с клавиатуры.

Код:
void MainWindow::keyPressEvent(QKeyEvent* ev)
{
    QString CurrentLabel_disp = ui->label->text();
    QString KeyPressed;

    if (ev->key() == Qt::Key_0)
        KeyPressed = "0";
    else if (ev->key() == Qt::Key_1)
        KeyPressed = "1";
...    

    else if (ev->key() == Qt::Key_Plus)
        KeyPressed = "+";
    else if (ev->key() == Qt::Key_Minus)
        KeyPressed = "-";
    else if (ev->key() == Qt::Key_Slash)
        KeyPressed = "/";
    else if (ev->key() == Qt::Key_multiply)
        KeyPressed = "*";
}

Описал событие нажатия через "keyPressEvent()" метод. Однако знак умножения (*) не работает (с остальными символами всё в порядке).
Поразмыслив, решил вместо "keyPressEvent()" переопределить "bool eventFilter()" и использовать "installEventFilter(this)":

Код:
bool MainWindow::eventFilter(QObject *obj, QEvent *event){
    if(obj==this && event->type()==QEvent::KeyPress){
        QKeyEvent* keyEvent=static_cast<QKeyEvent*>(event);
        QString KeyPressed;
        switch (keyEvent->key()) {
        case Qt::Key_0:
             KeyPressed="0";VisualItem_key_pressed(KeyPressed);return true;
        case Qt::Key_1:
             KeyPressed="1";VisualItem_key_pressed(KeyPressed);return true;

...      

        case Qt::Key_Plus:
             KeyPressed="+";VisualItem_key_pressed(KeyPressed);return true;
        case Qt::Key_Minus:
             KeyPressed="-";VisualItem_key_pressed(KeyPressed);return true;
        case Qt::Key_Slash:
             KeyPressed="/";VisualItem_key_pressed(KeyPressed);return true;
        case Qt::Key_multiply:
             KeyPressed="*";VisualItem_key_pressed(KeyPressed);return true;
        }
    }
    return QMainWindow::eventFilter(obj,event);
}

Но и в этом случае нажатие клавиши умножения не даёт никакой реакции.
Т.к. нажатие на нумпаде клавиши * или shift+8 не дают никакой реакции и case Qt::Key_multiply не срабатывает, то думаю, может я
в названии клавиши ошибся? А знак дробного разделителя на нумпаде (точка), она как в Qt::Key называется?

Наставьте на верный путь пожалуйста
Страниц: [1]

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