qml: 实现类似 chrome 的菜单
qml: achieve a chrome-like menu
我想用 QML 实现一个只有一个菜单项的菜单,就像 chrome 那样。它有一个带有三个水平条的按钮,当您单击它时,您会看到一个菜单。最近的 firefox 版本也遵循同样的原则。它允许在应用程序的 GUI 中不浪费太多水平 space,取消占据 window.
整个宽度的常用菜单。
我没能用 QML 准确地重现这个 GUI。据我所见,您可以使用 QML ApplicationWindow
,然后使用 MenuBar
,但随后它会占据 window 的整个宽度...或者使用切换按钮来触发菜单,然后使用独立的 Menu
及其 popup()
方法,但它直接在光标下方弹出,而不是在按钮下方弹出菜单,这看起来不太好。这确实是在滥用上下文菜单机制。
我可以在我的 window 中制作一个自定义小部件的假菜单,但它无法扩展到我的应用程序 window 之外。这种行为几乎是必需的,因为我将把这个按钮放在 window 的最右边,就像 chrome 那样。
是否可以在纯 QML(无 C++)中完全实现该行为?
我现在所做的是我提到的最后一个选项:window 中的假菜单。它使用 canvas 进行绘制,这使我能够将它变成一个从菜单到菜单切换按钮的小尖箭头,就像 firefox 所做的那样。
正如我所说的缺点是菜单不能超出 window,而且一切都非常手动(菜单项的鼠标悬停效果......),所以我仍然对其他解决方案感兴趣.
编辑:好的,一段时间后我意识到我的方法的一大优点:我可以放置自定义小部件,而不仅仅是菜单中的标签。所以我认为现在这绝对是正确的做法。
我想用 QML 实现一个只有一个菜单项的菜单,就像 chrome 那样。它有一个带有三个水平条的按钮,当您单击它时,您会看到一个菜单。最近的 firefox 版本也遵循同样的原则。它允许在应用程序的 GUI 中不浪费太多水平 space,取消占据 window.
整个宽度的常用菜单。我没能用 QML 准确地重现这个 GUI。据我所见,您可以使用 QML ApplicationWindow
,然后使用 MenuBar
,但随后它会占据 window 的整个宽度...或者使用切换按钮来触发菜单,然后使用独立的 Menu
及其 popup()
方法,但它直接在光标下方弹出,而不是在按钮下方弹出菜单,这看起来不太好。这确实是在滥用上下文菜单机制。
我可以在我的 window 中制作一个自定义小部件的假菜单,但它无法扩展到我的应用程序 window 之外。这种行为几乎是必需的,因为我将把这个按钮放在 window 的最右边,就像 chrome 那样。
是否可以在纯 QML(无 C++)中完全实现该行为?
我现在所做的是我提到的最后一个选项:window 中的假菜单。它使用 canvas 进行绘制,这使我能够将它变成一个从菜单到菜单切换按钮的小尖箭头,就像 firefox 所做的那样。
正如我所说的缺点是菜单不能超出 window,而且一切都非常手动(菜单项的鼠标悬停效果......),所以我仍然对其他解决方案感兴趣.
编辑:好的,一段时间后我意识到我的方法的一大优点:我可以放置自定义小部件,而不仅仅是菜单中的标签。所以我认为现在这绝对是正确的做法。