1

所以我正在编写一个 qtwidget,它需要通过覆盖相应的功能来进行键盘和鼠标输入。然而,keypress 事件在 mousepress 事件发生之前不会发生。我已经玩了一点焦点,但这似乎没有帮助。我觉得我错过了关于 qt 如何处理事件的一些东西。谁能给我填一下。谢谢

以下是我认为相关的代码。让我知道您是否需要更多

MeshTest::MeshTest(QWidget *parent) :
  QGLWidget(parent)
{
setFocusPolicy(Qt::StrongFocus);
/* Other stuff */

}
void MeshTest::mousePressEvent(QMouseEvent *event)
{
  if (event->button() == Qt::LeftButton) {

    /* Some math/ray casting here */
    hasHit = MeshTest::findIntersections(x,y,z,dirx,diry,dirz);


  }
}
void MeshTest::mouseReleaseEvent(QMouseEvent *event){
  if (event->button() == Qt::LeftButton) {
      /* Some ray casting stuff here */
  }

  if(hasHit)
    updateGL();
}

void MeshTest::keyPressEvent(QKeyEvent* event){
  printf("Key Pressed\n"); //Just for debugging this particular bug
}
4

1 回答 1

0

好的,所以我几天前解决了这个问题。解决方案是覆盖 QWidget::event(QEvent *event) 并在函数本身中进行所有事件处理

于 2013-07-26T21:15:40.737 回答