當某些事件發生時,我正在嘗試向 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。任何想法?
uj5u.com熱心網友回復:
似乎有效的解決方案:
if(QAccessible::isActive()){
QWidget* focusedWidget = QApplication::focusWidget();
if(focusedWidget != nullptr){
auto *ev = new QAccessibleValueChangeEvent(focusedWidget, "New Message");
QAccessible::updateAccessibility(ev);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/449625.html
