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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перехват нажатия клавиши клавиатуры, калькулятор C++ Qt 5.  (Прочитано 3040 раз)
Aidar
Новичок

Offline Offline

Сообщений: 1


Просмотр профиля
« : Май 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 называется?

Наставьте на верный путь пожалуйста
« Последнее редактирование: Май 23, 2021, 21:20 от Aidar » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Май 23, 2021, 23:39 »

Qt::Key_Asterisk
Записан

Изучением 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
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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