1

QMainWindow の上にある QGraphicsView 内に QGraphicScene を持つ Qt プログラムがあります。イベントは、eventFilter 関数を使用して QMainWindow によって処理されます。関数本体は次のコードのようになります。

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 print を追加すると、バグがなくなり、正しいマウス座標が使用されます。

何が原因でしょうか?

4

0 に答える 0