使用键盘 qt 移动对象

Posted

技术标签:

【中文标题】使用键盘 qt 移动对象【英文标题】:Moving object using keyboard qt 【发布时间】:2018-11-21 09:58:21 【问题描述】:

我正在尝试使用箭头键移动对象,但是当我启动应用程序时,什么也没有发生。你知道如何解决它吗?

@Update :我的矩形只向左和向右移动一次,但如果我使用 qDebug,它会识别我单击左或右的所有时间,有什么想法吗?

void MouvementJoueur::keyPressEvent(QKeyEvent *e)

switch ( e->key() )
    
    case Qt::Key_Left:
        rectangle->setPos(x()-10,y());
        qDebug() << "You pressed the Key left";
        break;
    case Qt::Key_Right:
        rectangle->setPos(x()+10,y());
        qDebug() << "You pressed the Key right";
        break;
    
 

提前谢谢你!

【问题讨论】:

“什么都没有发生”是相当模糊的错误描述。如果确实如此,实际上似乎什么也没发生,问题很可能出在主函数中,例如从不调用事件循环。 如果可能,您应该尝试提供 MCVE。此外,如果您希望其他人阅读您的代码,强烈建议您正确缩进。这只是对那些你想帮助你的人的基本礼貌。所有常用的 Qt IDE(Qt Creator、Visual Studio、KDevelop...)都具有自动缩进或代码格式化功能,因此没有理由在此处将格式不佳的代码发布到 Stack Overflow。 @hyde 我编辑了它,但我仍然必须在 *** 和 idk 中插入空格,我的意思是,如果我单击右箭头或左箭头,我的矩形不会移动。你有什么建议? 要在 SO 中正确格式化代码,只需将其粘贴到问题编辑文本框中,并使用您原来的正确缩进,并在下方和上方使用空行。然后选中整个代码sn-p,点击代码格式化图标,或者键盘快捷键ctrl-K。 【参考方案1】:

您的问题似乎是,您获取父级的位置,并根据该位置设置矩形的位置。这可能不是您想要在此处使用按键的方式。你应该这样设置位置:

rectangle->setPos(rectangle->x() - 10, rectangle->y());

【讨论】:

【参考方案2】:

您可以使用以下命令刷新 GUI

view->processEvents();

你可以调试它。它检测按键是否按下。

void MouvementJoueur::keyPressEvent(QKeyEvent *e)

  if(e->key() == Qt::Key_Left)
  
    rectangle->setPos(x()-10,y());
    qDebug() << "You pressed the Key x";
   

  if(e->key() == Qt::Key_Right)
  
    rectangle->setPos(x()+10,y());
    qDebug() << "You pressed the Key x";
  

【讨论】:

谢谢,它可以识别,但我的矩形没有显示在屏幕上,它是不可见的..

以上是关于使用键盘 qt 移动对象的主要内容,如果未能解决你的问题,请参考以下文章

Qt中的键盘事件,以及焦点的设置(比较详细)

使用特定键盘键的 qt 橡皮筋选择

QT:即使在 setfocus() 之后也无法用键盘控制我的 QGraphicsPixmapItem

如何使用键盘移动对象?

如何使用 qt 在键盘上仅显示数字

Qt 中的键盘输入