【问题标题】:Qt: huge scrollable sub-menu loses itemsQt:巨大的可滚动子菜单丢失项目
【发布时间】:2018-07-11 13:27:24
【问题描述】:

更新添加:

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

原问题:

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

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

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

看起来像这样:

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

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

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

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

【问题讨论】:

  • 嘿@TonyK,你找到解决办法了吗?
  • @SirJames:不,我从来没有这样做过。我现在做得很好,有一个对话框。
  • 你创建一个带有对话框的滚动列表?它的行为是否相似?我问是因为我在 PySide 中做类似的事情,但通常有 80-200 个菜单项。

标签: css qt submenu


【解决方案1】:

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

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

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

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

【讨论】:

  • 滚动按钮仍然存在。但它没有出现在第二个屏幕截图中,因为菜单已尽其所能。如果我向下滚动,它会正常显示。我尝试了将triggered 信号连接到update 插槽的建议,但没有任何改变。
【解决方案2】:

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

【讨论】:

  • 我估计我可能会收到一两个这样的回复!但我的用户通常必须处理 20-50 个项目。我自己是唯一需要处理这么多项目的用户,我会对(工作的)1000 个项目的子菜单感到满意。
  • 一个 50 项的菜单仍然是一个惊人的 GUI blooper!而“通常”意味着会有更多用户获得更多。您可能已经发现了一个错误,但由于您完全滥用了子菜单的设计 - 它不起作用也就不足为奇了。
猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 2016-04-25
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多