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();
    }

0 ответов

Другие вопросы по тегам