我有一个程序可以捕获单个按键,然后输出正在按下的键。问题是,我无法返回被按下的键的值,并且无法使箭头键输出任何内容。这是我的代码:
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值?
感谢任何帮助。
答案 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());