gpt4 book ai didi

c++ - NVDA 屏幕阅读器请求错误的 QAccessible::InterfaceType

转载 作者:行者123 更新时间:2023-12-02 10:24:51 27 4
gpt4 key购买 nike

我在 Qt 5.9.1 上。

我正在尝试使应用程序可以通过屏幕阅读器访问。我有一个自定义小部件(我们称之为 MyWidget ),其中包含文本(很多)。文本是使用 QPainter 绘制的,这就是为什么使用自定义小部件而不是像 QTextBrowser 这样的小部件的原因.

我实现了QAccessibleTextInterface对于 AccessibleMyWidget 中的小部件派生自 QAccessibleWidget 的类和 QAccessibleTextInterface .它适用于 Linux 下的 Orca,但在带有 NVDA 的 Windows 7 中使用时,QAccessibleInterface::interface_cast()请求错误的接口(interface)类型。使用 Orca,我收到了 QAccessible::TextInterface 的请求.在 NVDA 中,它始终是 QAccessible::ValueInterface .
AccessibleMyWidget定义为:

class AccessibleMyWidget:
public QAccessibleWidget, public QAccessibleTextInterface {

public:
explicit AccessibleMyWidget(QWidget* w)
: QAccessibleWidget(w, QAccessible::EditableText)
{
Q_ASSERT(isValid());
}

void* interface_cast(QAccessible::InterfaceType t) override
{
if (t == QAccessible::TextInterface) {
// !!! This is never requested with NVDA !!!
return static_cast<QAccessibleTextInterface*>(this);
}
return QAccessibleWidget::interface_cast(t);
}

/*
* QAccessibleTextInterface implementation below this point.
*/
void addSelection(int startOffset, int endOffset) override;
QString attributes(int offset, int* startOffset,
int* endOffset) const override;
// etc.
};

在 Linux 下使用 Orca,一切似乎都按预期工作。我接到 interface_cast() 的电话对于 TextInterface ,然后是 QAccessibleTextInterface的各种功能被称为。在 Linux 下使用 NVDA,我只得到 interface_cast()调用 ValueInterface ,并且没有 QAccessibleTextInterface函数被调用。这意味着 MyWidget完全无法访问,除非我覆盖 QAccessibleWidget::text()并将所有文本作为单个字符串返回,这意味着没有光标导航,没有选择支持......它基本上只是一个 QLabel在这一点上,但有大量的文字,因此很难使用。

我在这里想念什么?

最佳答案

嗯,一位 NVDA 开发人员帮助我找到了问题所在。这是因为 Qt 的 MinGW 版本禁用了 IAccessible2 并改用 MSAA(Microsoft Active Accessibility),它不支持任何这些接口(interface)。 IA2 需要 COM,而 MinGW 不支持。
所以我必须从 GCC/MinGW 切换到 MSVC 才能在 Windows 上完成这项工作。太糟糕了,在可预见的 future 这实际上不是一个选择:-/
2020年更新:
从那以后,这已得到解决。不确定确切的时间,但当前的 mingw Qt 版本现在支持这一点。

关于c++ - NVDA 屏幕阅读器请求错误的 QAccessible::InterfaceType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44899048/

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