QKeyEvent keyPressEvent没有检测到箭头键?

时间:2016-02-07 00:34:22

标签: c++ qt

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

myApp.h

class someClass: public QDialog
{
  Q_OBJECT

public:
  ...<snip>...

private:
  ...<snip>...

protected:
  void keyPressEvent(QKeyEvent *e);
};

MyApp.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_32\include/QtCore/qstring.h
w492_32\include/QtCore/qstring.h
492_32\include/QtCore/qstring.h
92_32\include/QtCore/qstring.h

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

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

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

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