Новичок в 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 называется?
Наставьте на верный путь пожалуйста