eventFilter函数的更改会导致奇怪的QGraphicSscene行为

时间:2012-09-06 09:57:16

标签: c++ qt qgraphicsview qgraphicsscene

我在QMainWindow顶部的QGraphicsView中有一个带QGraphicScene的Qt程序。 事件由QMainWindow使用eventFilter函数处理。 函数体看起来类似于这段代码:

bool Window::eventFilter(QObject *, QEvent *event) {
  QEvent::Type type = event->type();

  if (type == QEvent::KeyPress) {
    QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);

    switch(keyEvent->key()) {
    case Qt::Key_A:
    case Qt::Key_B:
    case Qt::Key_C:
    case Qt::Key_D:
      // call a function that uses the current mouse position on the graphics scene
      break;
    default:
      QLocale loc = QApplication::keyboardInputLocale();
      if(loc.language() != QLocale::English) {
        QString message = "A non-English key was pressed";
        showMessage(message, QMessageBox::Warning);
      }
    }

    return true;
  }

  return false;
}

我最近添加了“默认”部分,从那以后在A,B,C,D情况下使用的坐标是完全错误的。另外,如果我在函数的任何地方添加一个简单的cout打印,那么bug就会消失,并且会使用正确的鼠标坐标。

可能导致这种情况的原因是什么?

0 个答案:

没有答案