qt keypressevent()中的多个键
Posted
技术标签:
【中文标题】qt keypressevent()中的多个键【英文标题】:qt multiple keys in keypressevent() 【发布时间】:2014-05-03 22:37:46 【问题描述】:我正在尝试在 Qt 上创建一个玩家可以沿对角线前进的游戏。所以当我按下 W 和 D 时,玩家可以到右上角。但是,当我先按 W,然后按 D,然后松开 D,播放器不会向 W 方向移动。事实上,按住 W 键并没有发出调用 keypressevent() 函数的信号。 但是,当我按 W,然后 D,然后松开 W 时,角色会朝 D 方向移动。
这是我的代码:
void my_qscroll::keyPressEvent(QKeyEvent *event)
switch ( event->key() )
case Qt::Key_W:
key[0] = 1;
break;
case Qt::Key_A:
key[1] = 1;
break;
case Qt::Key_S:
key[2] = 1;
break;
case Qt::Key_D:
key[3] = 1;
break;
for(int i = 0; i != 4 ; i++)
if(key[i] == 1)
this->B = i;
emit Move();
void my_qscroll::keyReleaseEvent(QKeyEvent *event)
switch ( event->key() )
case Qt::Key_W:
key[0] = 0;
qDebug() << "released W";
break;
case Qt::Key_A:
key[1] = 0;
qDebug() << "released A";
break;
case Qt::Key_S:
key[2] = 0;
qDebug() << "released S";
break;
case Qt::Key_D:
key[3] = 0;
qDebug() << "released D";
break;
我不确定如何解决这个问题。任何可以帮助我的想法或链接都会很棒。先感谢您。
【问题讨论】:
所以在我提出问题后,我的朋友给我发了这个链接:qtforum.org/article/28368/… 它完美地解决并解决了我的问题。 【参考方案1】:你需要这样的东西:
void my_qscroll::keyPressEvent(QKeyEvent *event)
switch ( event->key() )
case Qt::Key_W:
key[0] = 1;
break;
case Qt::Key_A:
key[1] = 1;
break;
case Qt::Key_S:
key[2] = 1;
break;
case Qt::Key_D:
key[3] = 1;
break;
for(int i = 0; i != 4 ; i++)
if(key[i] == 1)
this->B = i;
emit Move();
void my_qscroll::keyReleaseEvent(QKeyEvent *event)
switch ( event->isAutoRepeat() )
case Qt::Key_W:
key[0] = 0;
qDebug() << "released W";
break;
case Qt::Key_A:
key[1] = 0;
qDebug() << "released A";
break;
case Qt::Key_S:
key[2] = 0;
qDebug() << "released S";
break;
case Qt::Key_D:
key[3] = 0;
qDebug() << "released D";
break;
void my_qscroll::movePlayer()
if (key[1] && key[0])
left -= 2;
top -= 2;
else if (key[3] && key[0])
left += 2;
top -= 2;
else if (key[2] && key[1])
left -= 2;
top += 2;
else if (key[2] && key[3])
left += 2;
top += 2;
else if (key[3])
left += 2;
else if (key[1])
left -= 2;
else if (key[2])
top += 2;
else if (key[0])
top -= 2;
void myCanvas::updateEnv()
emit Move();
repaint();
【讨论】:
以上是关于qt keypressevent()中的多个键的主要内容,如果未能解决你的问题,请参考以下文章
qt keyPressEvent函数方向键没有响应键盘事件的解决方法
不能通过 keyPressEvent 使用 QPlainTextEdit 中的其他键
在使用 keyPressEvent 子类化 QTableView 后,我失去了对箭头键的使用。如何在保持自定义信号的同时轻松使用它们进行导航?