Catching bacspace для прессы на QT
Моя программа QT может отлавливать щелчки на цифровой клавиатуре, но не может отразить нажатие на клавишу возврата. После нажатия кнопки мышью она начинает ловить нажатие на клавишу возврата.
В чем проблема?
Случай:
- Запустить программу
- Нажмите кнопку 0 на клавиатуре.
- Добавляет 0 для отображения
- Нажмите Backspace на клавиатуре
- Ничего не случилось
- Нажмите 0 с помощью мыши
- Добавляет 0 для отображения
- Нажмите Backspace на клавиатуре
- Теперь он удаляет последние 0
calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include <QKeyEvent>
class Calculator : public QWidget {
Q_OBJECT
public:
Calculator();
public slots:
void clkDEL();
void clk0();
private:
QGridLayout *mainlayout;
QLineEdit *displayline;
QPushButton *btn0;
void keyPressEvent(QKeyEvent *event);
};
#endif // CALCULATOR_H
main.cpp
#include <QApplication>
#include <QPushButton>
#include <QLineEdit>
#include <QWidget>
#include "Calculator.h"
Calculator::Calculator(){
mainlayout = new QGridLayout();
displayline = new QLineEdit("0");
displayline->setReadOnly(true);
mainlayout->addWidget(displayline);
btn0 = new QPushButton("0");
connect(btn0, SIGNAL(clicked()),this, SLOT(clk0()));
mainlayout->addWidget(btn0);
this->setLayout(mainlayout);
}
void Calculator::clkDEL() {
if (displayline->text().length() == 1)
displayline->setText("0");
else
displayline->setText(displayline->text().remove(displayline->text().length()-1,1));
}
void Calculator::clk0(){
displayline->setText(displayline->text().append("0"));
}
void Calculator::keyPressEvent(QKeyEvent *event) {
switch (event->key()) {
case Qt::Key_Backspace:
clkDEL();
break;
case Qt::Key_0:
clk0();
break;
default:
break;
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Calculator cal;
cal.show();
return a.exec();
}