如果QVTKWidget是QMainWindow的中心小部件,那么QMainMenu的行为会很奇怪
QMainMenu behaves weirdly if QVTKWidget is the central widget of QMainWindow
好的,我花了一段时间才找到它,但我不知道如何解决它。
我的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)
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 如果我已经有一个头,那么模板(-t)文件属于哪里
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- C++ 运算符修改/元编程策略,用于不那么冗长的语法
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 而不是那么多的 if 语句,我想要一个逻辑,我可以用一个语句或优化的方式来完成
- 在C++中,如果"int a = 3; int* p = &a;",那么为什么不允许"const int* &pp = p",但允许"const int* const &pp = p"?
- 如果偶数浮点数(分数数)的模数为 2,那么它不会给出'0'结果!在C++
- C++我们可以取消引用此指针吗?如果是这样,那么如何,如果不是,那为什么?
- 共享内存中的健壮互斥锁不是那么健壮
- 如果由不同的线程写入 8 字节,那么现代英特尔 x86 上的 8 字节读取是否保证理智?
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- 如果在命令行c++中给出了一个文件,那么如何读取该文件
- 在c++中,如果首先禁止默认构造,那么禁止复制构造有意义吗
- 如果我的容器位于两个现有值之间,那么伪造迭代器类别是否合理
- 如果我的类正确地管理了一个资源,那么拥有智能的poointer有什么意义
- 如果所有派生类在编译时都是已知的,那么final关键字是否提供了优化
- 如果QVTKWidget是QMainWindow的中心小部件,那么QMainMenu的行为会很奇怪