Qt World Summit 2023: Berlin awaits! Join us now
最新版Qt 6.3已正式发布。 了解更多。
最新バージョンQt6.5がご利用いただけます。 詳細はこちら

Not yet Accessible

Lately I had the chance to research accessibility a bit. Qt supports high contrast color schemes and big fonts as they are set on the platform. Another aspect of accessibility are assistive technologies (AT). That means exposing what an application shows on screen so that an AT-client can interpret it differently. A screen reader can take this information and use speech synthesis to help users navigate the screen. There are several AT standards. The aim for Qt is to support the native interface on all its supported platforms. For Windows at the moment we support MSAA which is a bit dated, but works. For Linux the situation looked rather sad so far. While this is still a research project, the goal is to let Qt and KDE applications be accessible on the Linux desktop.

Watch on Youtube

Lately Orca (the Gnome screen reader) started to work with DBus and AT-SPI 2. With a QAccessibleBridgePlugin Qt can make use of this and provide the same interfaces. The plugin uses Qt's internal implementation of IAccessible2 (another standard in the jungle of accessibility standards). This is currently work in progress but as you can see in the video, the basics are there.

For applications with custom widgets, the relevant part is to provide a QAccessiblePlugin. This is of course common to all platforms, so you only write it once and for the standard widgets it already comes with Qt.

If you are of the opinion only seeing hearing is believing, feel free to grab the plugin from gitorious: http://gitorious.org/qt-at-spi.

There is a catch of course: In order to use the plugin you need to have AT-SPI-2 working. Thanks to Mike Gorse and a few others the problems I ran into when testing AT-SPI2 were quickly fixed. The bridge is still eating kittens making applications crash.

Your have to install at-spi2-core, libatk-adaptor/at-spi2-atk, pyatspi2 and Orca. Accerciser can be a great help for debugging.

Tell gconf to use AT-SPI 2:

gconftool-2 --set /desktop/gnome/interface/at-spi-dbus --type bool true
gconftool-2 --set /desktop/gnome/interface/at-spi-corba --type bool false

Set some environment variables:

export GTK_MODULES=gail:atk-bridge

Thanks to Will and Jonathan we already have some preliminary packages for Suse and Kubuntu. But as said above, it is still in a crashy state. Some fixes made their way into Qt's master branch already (4.8).

For Qt and KDE applications what is needed now is testing and QAccessiblePlugins for widgets that don't ship with Qt.

Blog Topics: