如果QVTKWidget是QMainWindow的中心小部件,那么QMainMenu的行为会很奇怪

QMainMenu behaves weirdly if QVTKWidget is the central widget of QMainWindow

本文关键字:QMainMenu 那么 QMainWindow QVTKWidget 如果 小部      更新时间:2023-10-16

好的,我花了一段时间才找到它,但我不知道如何解决它。

我的Qt/vtk应用程序中的主菜单运行异常。菜单上的点击行为如下:

  • 第一次点击:弹出
  • 第二次点击:弹出
  • 第三次点击:什么都不做
  • 第四次点击:再次弹出

现在,这不会是那么糟糕,但问题是状态被记住了。因此,如果用户单击菜单两次,即手动关闭菜单,那么下一次单击菜单栏将不会有任何作用,即使他在这两次单击之间使用了其他GUI元素。这会导致令人讨厌的用户体验。

我创建了一个最小失败的例子:

#include <QAction>
#include <QApplication>
#include <QLabel>
#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
#include <QVTKWidget.h>
int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  QMainWindow mainWindow;
  QMenu *menu = mainWindow.menuBar()->addMenu("TestMenu");
  QAction *action = menu->addAction("TestAction");
  // Setting the central widget to QVTKWidget, produces a weirdly
  // behaving menu bar:
  //   First click: pop down
  //   Second click: pop up
  //   Third click: does nothing
  //   Fourth click: pop down again
  mainWindow.setCentralWidget(new QVTKWidget());
  // Setting the central widget to any other QWidget, like QLabel, produces a
  // normally behaving menu bar:
  //   First click: pop down
  //   Second click: pop up
  //   Third click: pop down again
  // mainWindow.setCentralWidget(new QLabel("TestLabel"));
  mainWindow.show();
  return app.exec();
}

如果QLabel中央小部件被注释入,而QVTKWidget中央小部件则被注释出,则菜单运行正常。

有什么想法下一步该怎么办来解决这个问题吗?

Qt 5.4.1和vtk 6.2.0上不再出现错误。

(vtk错误跟踪器链接:http://www.vtk.org/Bug/view.php?id=15013)

相关文章: