微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在我的 C++ Qt 计算器应用程序中拦截乘法 (*) 键的按下?

如何解决如何在我的 C++ Qt 计算器应用程序中拦截乘法 (*) 键的按下?

我是 Qt 新手,现在正在开发具有键盘输入机会的计算器应用程序 (1,2,3,4,5,6,7,8,9,-,+,/,*,.,(,),).

首先,我试着像这样确定“keyPressEvent”方法

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 = "*";
}

经过一些思考,我决定重新实现“bool eventFilter()”并使用“installEventFilter(this)”方法而不是“keyPressEvent”确定:

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_multiply”中,因为我真的不知道在Qt中如何调用numpad十进制分隔符(.)和乘法(*)符号..

你能指导我解决这个问题吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。