C++ eventFilter函数的更改会导致奇怪的场景行为

C++ eventFilter函数的更改会导致奇怪的场景行为,c++,qt,qgraphicsview,qgraphicsscene,C++,Qt,Qgraphicsview,Qgraphicsscene,我有一个Qt程序,QGraphicsView中的QGraphicsView位于QMainWindow顶部。 QMainWindow使用eventFilter函数处理事件。 函数体与以下代码类似: bool Window::eventFilter(QObject *, QEvent *event) { QEvent::Type type = event->type(); if (type == QEvent::KeyPress) { QKeyEvent *keyEvent

我有一个Qt程序,QGraphicsView中的QGraphicsView位于QMainWindow顶部。 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;
}
bool窗口::事件过滤器(QObject*,QEvent*事件){
QEvent::Type Type=event->Type();
if(type==QEvent::KeyPress){
QKeyEvent*keyEvent=静态广播(事件);
开关(keyEvent->key()){
案例Qt::关键步骤A:
案例Qt::关键点B:
案例Qt::关键点C:
案例Qt::关键点D:
//调用在图形场景中使用当前鼠标位置的函数
打破
违约:
QLocale loc=QApplication::keyboardInputLocale();
if(loc.language()!=QLocale::English){
QString message=“按下了非英语键”;
showMessage(消息,QMessageBox::警告);
}
}
返回true;
}
返回false;
}
我最近添加了“默认”部分,从那以后,在A、B、C、D情况下使用的坐标是完全错误的。此外,如果我在函数中的任意位置添加一个简单的cout print,错误就会消失,并使用正确的鼠标坐标


什么可能导致这种情况?

这听起来像是内存/堆栈损坏问题。“增加随机呼叫,自我修复”通常就是一个标志。是否可能在任何地方使用未初始化的成员或指针?尝试通过CppCheck实用程序运行代码。(无论如何都不会受伤)发布获取鼠标位置的代码。更好的办法是,发布实际演示问题的最低代码。@StephenChu我认为问题不在于获取鼠标位置的代码,因为我根本没有更改它。@Zeks你可能是对的-我以前确实有内存损坏问题,我花了太多时间才忽略了这个问题。我尝试在windows上使用内存验证器,在linux上使用valgrind。我将尝试使用CppCheck或类似的程序,但我认为我不会有太多帮助。