Qml:辅助功能不适用于所有元素

Qml: Accessibility not working for all elements

我正在为 QML 应用程序添加辅助功能。使用 Windows Narrator 或 NVDA 程序时,它们无法读取 ComboBox 的元素。他们读 ComboBox 很好,但不是它的内容。 无法 post 我的项目 post 此处的示例文件。

QML:

import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 2.14
Item {
    visible: true
    width: 640
    height: 480


    ComboBox{
        model: ["option1","option2","option3"]
        Accessible.name: "ComboBox"
        Accessible.description: "ComboBox"


    }
}

Main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQuickView view;
    const QUrl url(QStringLiteral("qrc:/main.qml"));

    view.setSource(url);
    view.show();
    return app.exec();
}

Qt 版本:5.15.2,感谢任何帮助

因此,在浏览 QT Bugs 后发现 QML 的可访问性不完全支持并且 QT 自 2016 年以来就意识到了这一点。这张票真的很有帮助 https://bugreports.qt.io/browse/QTBUG-68465 和来自评论

Qt should actually be setting focus to the menu's first child menu item, since this is thew behavior VoiceOver expects. We currently don't do this.

因此,通过强制聚焦可以解决这个问题,我能够解决它。 检查 focus:true 这是最重要的部分。

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
    visible: true
    width: 640
    height: 480
    

    ComboBox{
        id: selectMe
        model: ["selectMe1","selectMe2","selectMe3"]
        focus: true
        Accessible.role: Accessible.ComboBox

        contentItem:
            Text {
            id: ld2
            text: selectMe.currentText
          
           }

        
        hoverEnabled: true
        popup: Popup {
            y: selectMe.height - layoutRowHeight
            width: selectMe.width
            implicitHeight: contentItem.implicitHeight
            padding: 1
            focus: true
       

            contentItem: ListView {

                spacing: 2
                focus: true
                Accessible.role: Accessible.List
                clip: true

                implicitHeight: contentHeight
                model: selectMe.popup.visible ? selectMe.delegateModel : null
       
                delegate: ItemDelegate {
                    id: selectMeDelegate
                    width: selectMe.width
                     focus: true
                    contentItem:
                        Text {
                        text: modelData
                        color: "black"
                        font.pointSize: 12
                        elide: Text.ElideRight
                        verticalAlignment: Text.AlignVCenter
                        horizontalAlignment: Text.AlignLeft
                        focus: true
                        Accessible.name: "selectMe combobox"
                        Accessible.description: "selectMe"

                    }
                    background: Rectangle{
                        width: selectMe.width
                        height: selectMe.height
                       
                    }
                }

            }

            background: Rectangle {
                color:"grey"
                opacity: 0.5
                radius: 10
            }
        }
    }

}