如何解决如何在我的 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 举报,一经查实,本站将立刻删除。