Qt 中的辅助功能通知
Accessibility notification in Qt
我正在尝试在某些事件发生时向 Jaws 或 NVDA 推送通知。
这些事件可以随时发生,并且任何应用程序小部件都可以拥有焦点。它们不链接到用户操作,而是链接到控制器事件。
这是我的尝试:
void announceNewMessageIfNeeded(){
if(QAccessible::isActive()){
QWidget* focusWidget = QApplication::focusWidget();
if(focusWidget != nullptr){
auto* accessibleInterface = QAccessible::queryAccessibleInterface(focusWidget);
accessibleInterface->setText(QAccessible::Name, "New Message");
auto *ev = new QAccessibleEvent(accessibleInterface, QAccessible::Alert);
QAccessible::updateAccessibility(ev);
}
}
}
我尝试了上面的代码并进行了各种小改动,但我要么没有可访问性更新,要么无法访问空指针。
通过调试日志,我确定 focusWidget 是正确的(它指向具有 currentFocus 的项目)并且调用了 announceNewMessageIfNeeded。
有什么想法吗?
似乎有效的解决方案:
if(QAccessible::isActive()){
QWidget* focusedWidget = QApplication::focusWidget();
if(focusedWidget != nullptr){
auto *ev = new QAccessibleValueChangeEvent(focusedWidget, "New Message");
QAccessible::updateAccessibility(ev);
}
}
我正在尝试在某些事件发生时向 Jaws 或 NVDA 推送通知。 这些事件可以随时发生,并且任何应用程序小部件都可以拥有焦点。它们不链接到用户操作,而是链接到控制器事件。 这是我的尝试:
void announceNewMessageIfNeeded(){
if(QAccessible::isActive()){
QWidget* focusWidget = QApplication::focusWidget();
if(focusWidget != nullptr){
auto* accessibleInterface = QAccessible::queryAccessibleInterface(focusWidget);
accessibleInterface->setText(QAccessible::Name, "New Message");
auto *ev = new QAccessibleEvent(accessibleInterface, QAccessible::Alert);
QAccessible::updateAccessibility(ev);
}
}
}
我尝试了上面的代码并进行了各种小改动,但我要么没有可访问性更新,要么无法访问空指针。 通过调试日志,我确定 focusWidget 是正确的(它指向具有 currentFocus 的项目)并且调用了 announceNewMessageIfNeeded。 有什么想法吗?
似乎有效的解决方案:
if(QAccessible::isActive()){
QWidget* focusedWidget = QApplication::focusWidget();
if(focusedWidget != nullptr){
auto *ev = new QAccessibleValueChangeEvent(focusedWidget, "New Message");
QAccessible::updateAccessibility(ev);
}
}