gpt4 book ai didi

c++ - 包含 QMdiSubWindows 的 QMdiArea 对可访问性 API 不可见

转载 作者:可可西里 更新时间:2023-11-01 11:18:23 26 4
gpt4 key购买 nike

我正在使用 Qt 应用程序并尝试通过辅助功能界面实现 UI 自动化。这一切都很好,除了这个应用程序有一个包含 QMdiSubWindowQMdiArea 并且这些子窗口中包含的任何内容对自动化界面都是完全不透明的。我尝试通过 Windows SDK 中的 UIAVerify 检查元素,显示如下:

MDI area

这些子窗口包含标准网格布局,其中包含标准 Qt 小部件。由于这里的 heirachy 完全由标准 Qt 小部件组成,并且所有标准 Qt 小部件都实现了 MSAA 定义的可访问性接口(interface),我不明白为什么当我可以自由访问 GUI 的所有其他区域中的元素时,MDI 区域中的所有元素都被隐藏了.

最佳答案

可能的原因是 Qt 没有将其控件注册为有效的 windowsQt 中的所有控件都绘制在一个 Canvas 上。它是出于优化原因而制作的。

这样的 Qt 控件称为 alien widgets .

好消息是您可以让 Qt 注册 Windows 中的所有控件。 documentation陈述了一些方法来做到这一点:

  • 在您的环境中使用 QT_USE_NATIVE_WINDOWS=1。
  • 在您的应用程序上设置 Qt::AA_NativeWindows 属性。所有小部件都将是 native 小部件。
  • 在小部件上设置 Qt::WA_NativeWindow 属性:小部件本身及其所有祖先都将变为原生(除非设置了 Qt::WA_DontCreateNativeAncestors)。
  • 调用 QWidget::winId 强制使用 native 窗口(这意味着 3)。
  • 设置 Qt::WA_PaintOnScreen 属性以强制使用 native 窗口(这意味着 3)。

第一个是最简单的,不需要重新编译程序。

我用 UIAVerify 试了一下,得到了一棵完整的 MDI 控件树。

关于c++ - 包含 QMdiSubWindows 的 QMdiArea 对可访问性 API 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26464850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com