2

更新添加:

我已经解决了这个问题,经过一段时间。首先,我尝试MySubmenu -> clear()在单击父菜单时调用并重建子菜单。令人惊讶的是,这并没有奏效。所以我带来了大炮:delete MySubmenu其次是MySubmenu = new QMenu (MyMainWindow)重建子菜单。它现在可以工作,没有太多明显的延迟。所以我很高兴,我想。

原始问题:

我有一个包含大约 1000 个项目的子菜单(它是调试器中的 C 函数列表)。默认情况下,Qt 在列中显示子菜单,但是这个子菜单太大而无法在屏幕上显示,并且我无法访问不适合的项目。

所以我使用样式表使子菜单可滚动:

MySubmenu -> setStyleSheet ("* { menu-scrollable: 1 }") ;

它看起来像这样:

大菜单

请注意顶部和底部的滚动按钮。但是现在如果我选择一个项目(本例中为 PopRecordLength),那么下次我打开子菜单时,PD_DecryptCommand 上面的所有项目都消失了:

糟糕的菜单

顶部的滚动按钮消失了(您可以看到的小线是以前项目的下划线。)如果我向下滚动到底部,则会出现很大的空白区域。子菜单的总大小没有改变,但 PD_DecryptCommand 上面的项目从顶部消失了,我无法用鼠标或键盘访问它们。

然而……我刚刚发现,在准备这篇文章的过程中,如果我点击这个大空白区域,子菜单就会消失,但我下次打开它时,它已经恢复到原来的状态。所以有一个解决方法。但这不是很友好。

这是Qt中的错误吗?还是我没有正确设置样式表?

4

2 回答 2

1

可能是因为你有太多的项目,菜单占据了整个屏幕的高度,当你选择一个项目时,它的高度会增加一点,顶部的滚动按钮就会消失。

我会尝试将triggered菜单的信号与update插槽连接,以便在每次触发操作时重新绘制菜单

connect(MySubmenu , SIGNAL(triggered(QAction*), MySubmenu , SLOT(update()));

您也可以尝试更改菜单的最大高度(max-height样式表属性)。

于 2011-11-24T12:22:09.007 回答
0

抱歉,这不是您问题的真正答案,但是您真的认为将 1000 项放入菜单中是个好主意吗?它的可用性非常糟糕。您应该找到一种更好的方式向用户呈现如此多的操作,例如按字母顺序排列的子菜单(“p”->“PopRecordLength”、“PopShort”...)。这也将解决您的菜单问题。

于 2011-11-24T11:36:13.440 回答