Skip to page content

弹出代理

QPopupProxy 应该用于当您需要在较大屏幕上显示 QMenu 或在较小屏幕上显示 QDialog 时。它充当一个代理,可以选择使用这两个组件中的任何一个。QPopupProxy 还可以处理上下文菜单。

QPopupProxy API

用法

TIP

使用浏览器的开发工具在移动设备或桌面设备之间切换(每次更改后刷新浏览器),或者在实际点击/触摸其容器之前,调整浏览器窗口的大小,以观察 QPopupProxy 组件在 QMenu 或 QDialog 之间切换。默认断点设置为 450px。

标准

标准



上下文菜单

断点

在下面的示例中,点击输入框中的图标。无论最终渲染出的是两个组件中的哪一个,只要弹出层处于打开状态,QInput 就会一直保持聚焦。

透传属性

请记住,QMenu 和 QDialog 的所有属性都通过此组件传递。因此,像 offset 或 transition-show 这样的属性可以与 QPopupProxy 一起使用。唯一的例外是 separate-close-popup,它由 QPopupProxy 在内部管理。

TIP

当使用 Menu(菜单)时,QPopupProxy 会为它设置默认的 max-height 为 99vh。设置 max-height 属性即可覆盖这个默认值。

无障碍访问
v2.25+

QPopupProxy 自身没有语义——它暴露的是当前渲染的组件所提供的内容。在断点以下是 QDialog(role="dialog" 配合受管理的 aria-modal),在断点以上是 QMenu(一个刻意不声明 ARIA role 的定位容器)。各模式的播报方式及键盘交互和焦点处理,分别参见 QDialog 的无障碍访问章节 和 QMenu 的无障碍访问章节。

WARNING

与 props 一样,属性会穿透到当前激活的组件上——这也包括 role。一个你为菜单模式准备的 role(例如 role="menu")在断点以下会落到 QDialog 上并替换其 role="dialog"。如果需要声明 role,请将其放在弹出内容内部的元素上(如包裹的 QList)而非 QPopupProxy 本身。