You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在qx.ui.menu.Menu中用两个div分离按钮、实现滚动并解决子菜单不显示问题

解决方案

核心思路

  1. qx.ui.menu.Menu是弹出式组件,不能直接添加到根容器显示,必须通过setOpener()绑定触发按钮,点击触发按钮或调用open()方法才能正常弹出。
  2. 实现固定按钮+滚动区域的布局:在主菜单内嵌套两个容器,第一个放始终显示的固定按钮,第二个用qx.ui.container.Scroll容器包裹其余按钮,设置其最大高度为400px,内容超出时自动出现滚动条。

完整代码示例

// 创建主菜单实例
const mainMenu = new qx.ui.menu.Menu();

// 1. 固定按钮容器(始终显示在顶部)
const fixedBtnContainer = new qx.ui.container.Composite(new qx.ui.layout.VBox());
fixedBtnContainer.add(new qx.ui.menu.Button("固定显示按钮"));
mainMenu.add(fixedBtnContainer);

// 2. 滚动区域容器(高度超400px时显示滚动条)
const scrollContainer = new qx.ui.container.Scroll();
scrollContainer.setMaxHeight(400);
// 滚动区域内的按钮容器
const scrollBtnContainer = new qx.ui.container.Composite(new qx.ui.layout.VBox());

// 添加3-4个需要滚动的按钮
scrollBtnContainer.add(new qx.ui.menu.Button("滚动按钮1"));
scrollBtnContainer.add(new qx.ui.menu.Button("滚动按钮2"));
scrollBtnContainer.add(new qx.ui.menu.Button("滚动按钮3"));
scrollBtnContainer.add(new qx.ui.menu.Button("滚动按钮4"));

scrollContainer.setWidget(scrollBtnContainer);
mainMenu.add(scrollContainer);

// 创建触发菜单的按钮(必须绑定opener才能正常显示菜单)
const triggerBtn = new qx.ui.form.Button("点击打开菜单");
triggerBtn.setOpener(mainMenu);

// 将触发按钮添加到根容器
const doc = this.getRoot();
doc.add(triggerBtn, { left: 200, top: 50 });

// 测试用:自动打开菜单(可选)
// mainMenu.open();

关键说明

  • 菜单显示规则:qx.ui.menu.Menu的设计依赖触发组件(opener),通过setOpener()关联后,点击触发按钮会自动弹出菜单;手动调用open()前也必须先设置opener。
  • 滚动区域实现:qx.ui.container.Scroll容器配合setMaxHeight(400),内部VBox布局的按钮容器在内容高度超出400px时,会自动生成垂直滚动条。
  • 布局层级:主菜单默认使用VBox布局,固定按钮容器和滚动容器依次排列,保证固定按钮始终处于顶部,滚动区域在下方。

内容的提问来源于stack exchange,提问作者le4a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:25:37