【问题标题】:Moving object using keyboard qt使用键盘 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 我编辑了它,但我仍然必须在 stackoverflow 和 idk 中插入空格,我的意思是,如果我单击右箭头或左箭头,我的矩形不会移动。你有什么建议?
  • 要在 SO 中正确格式化代码,只需将其粘贴到问题编辑文本框中,并使用您原来的正确缩进,并在下方和上方使用空行。然后选中整个代码sn-p,点击代码格式化图标{},或者键盘快捷键ctrl-K。

标签: c++ qt qgraphicsview qgraphicsscene


【解决方案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";
      }
    }
    

    【讨论】:

    • 谢谢,它可以识别,但我的矩形没有显示在屏幕上,它是不可见的..
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2014-06-28
    • 2014-08-17
    • 2019-03-18
    • 2021-03-30
    • 2018-08-20
    • 2015-11-23
    • 2015-08-14
    相关资源
    最近更新 更多