QKeyEvent 键按事件未检测到箭头键

QKeyEvent keyPressEvent not detecting arrow keys?

本文关键字:检测 事件 QKeyEvent      更新时间:2023-10-16

>我有一个程序,它捕获单个按键,然后输出正在按下的键。问题是,我无法返回正在按下的键的值,并且根本无法让箭头键输出任何内容。这是我的代码:

我的应用程式

class someClass: public QDialog
{
  Q_OBJECT
public:
  ...<snip>...
private:
  ...<snip>...
protected:
  void keyPressEvent(QKeyEvent *e);
};

我的应用.cpp

MyApp::MyApp(QWidget *parent) :
  QDialog(parent),
  ui(new Ui::myApp)
{
  QWidget::grabKeyboard();
  ui->setupUi(this);
}
void someClass::keyPressEvent(QKeyEvent *e)
{
  qDebug() << "You typed " + e->key();
}

这里有两个问题。首先,当我键入任何键时,我会在"调试"窗格中获得如下所示的输出:

gw492_32include/QtCore/qstring.h
w492_32include/QtCore/qstring.h
492_32include/QtCore/qstring.h
92_32include/QtCore/qstring.h

我输入abcd来获得上述内容。key()不应该给我按下的键的整数值吗?

第二个问题是,当我点击其中一个箭头键时,除了一个空行之外,我在调试窗格中什么也没得到。同样,我不应该看到向上箭头的整数值吗?(此处列出的键的值)。然后,我将如何输出密钥的 ASCII 值?

任何帮助,不胜感激。

输出肯定看起来像是不需要的指针算术正在发生。这是未定义的行为。

"You typed " + e->key()

将指针推进到"You typed " e->key()并使其指向另一个位置,在本例中,该位置由您作为输出获取的字符串占用。

如果要正确打印,请执行以下任一操作:

qDebug() << "You typed " << e->key();
qDebug() << "You typed " + QString::number(e->key());
qDebug() << QString("You typed %1").arg(e->key());