Qt:Документация 4.3.2/qt4-accessibility

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
40px Внимание: Актуальная версия перевода документации находится здесь

__NOTOC__

Image:qt-logo.png

Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Image:trolltech-logo.png

[Предыдущая: Новый Qt Designer ] [ Начало ] [Следующая: Поддержка GUI баз данных в Qt 4 ]

[править] Кросплатформенные средства Qt 4 поддержки людей с ограниченными возможностями

Qt 4 позволяет разработчикам писать кроссплатформенные приложения, которые доступны для использования людей с ослабленным зрением, а также для пользователей с другими ограниченными возможностями. Такой подход Qt позволяет создавать приложения, доступные для большего количества пользователей и выйти на рынок правительственных заказов где доступность - частое требование.

[править] Общий Обзор

Qt 3 всегда поддерживал Microsoft Active Accessibility (MSAA) и Mac OS X Accessibility. Qt 4 закрыл пробел в достижении кросс-платформенности Trolltech, добавив поддержку для AT-SPI в Unix/X11.

Со времен Qt 3 классы мультиплатформенности были расширены различными способами. Мы добавили новые функции и новые значения перечислений, и пересмотрели API для того, чтобы сделать поддержку мультиплатформенности более совместимой с остальными частями Qt. Мы также добавили свойства QWidget, accessibleName и accessibleDescription, которые можно установить в Qt Designer для того, чтобы хранить вспомогательный текст без необходимости писать дополнительный код.

Архитектура достижения кросс-платформенности Qt следующая: Qt предоставляет один родовой интерфейс QAccessibleInterface, в который можно обернуть любые виджеты и объекты (например, QPushButton). Этот единственный интерфейс предоставляет все метаданные, необходимые для вспомогательных технологий. Qt предоставляет поддержку этого интерфейса для своих встроенных виджетов в виде плагинов.

При создании собственных виджетов вы можете создавать свои подклассы QAccessibleInterface и распространять их как модули (используя QAccessiblePlugin) или включать их в приложение. Аналогично, поддержка мультиплатформенности Qt может быть сделана как подключаемая (по умолчанию) или втроенная в библиотеку Qt. Основное преимущество использования плагинов заключается в том, что классы совместимости загружаются в память только, если есть в них потребность, а в обычном случае, если никакая вспомогательная технология не используется, они не замедляют работу.

В дополнение к QAccessibleInterfaceQt включает два класса, предназначенных для облегчения работы: QAccessibleObject и QAccessibleWidget. Они предоставляют минимальный набор общих значений метаданных (например, геометрия виджета, заголовок окна, текст краткой подсказки). Вы можете использовать их как при создании оболочек для ваших пользовательских подклассов QObject или QWidget.

Другая новая особенность Qt 4 - это поддержка других выходных буферов в добавок к предопределённому. Это можно сделать, создав подкласс QAccessibleBridge.

[править] Примеры кода

Первый пример показывает, как предоставить информацию о совместимости для стандартного виджета. Мы можем использовать QAccessibleWidget как базовый класс и переопределить реализацию различных функций:

 class MyWidgetInterface : public QAccessibleWidget
 {
 public:
     MyWidgetInterface(QWidget *widget, Role role);
 
     QString text(Text text, int child) const;
     State state(int child) const;
     QString actionText(int action, Text text, int child) const;
     bool doAction(int action, int child, const QVariantList &params);
     ...
 };

Здесь показано, как можено реализовать функцию doAction() для вызова функции именуемой click() для оборачиваемого объета MyWidget, когда пользователь вызывает для объекта дейсвие по умолчанию или "нажимает" его.

 bool MyWidgetInterface::doAction(int action, int child,
                                  const QVariantList &params)
 {
     if (child || !widget()->isEnabled())
         return false;
 
     switch (action) {
     case DefaultAction:
     case Press:
         {
             MyWidget *widget = qobject_cast<MyWidget *>(object());
             if (widget)
                 widget->click();
         }
         return true;
     }
     return QAccessibleWidget::doAction(action, child, params);
 }

To export the widget interface as a plugin, we must subclass QAccessibleFactory:

 QStringList MyFactory::keys() const
 {
     return QStringList() << "MyWidget" << "MyOtherWidget";
 }
 
 QAccessibleInterface *MyFactory::create(const QString &amp;className,
                                         QObject *object)
 {
     if (classname == "MyWidget")
         return new MyWidgetInterface(object);
     if (classname == "MyOtherWidget")
         return new MyOtherWidgetInterface(object);
     return 0;
 }
 
 Q_EXPORT_PLUGIN2(MyFactory)

[Предыдущая: Новый Qt Designer ] [ Начало ] [Следующая: Поддержка GUI баз данных в Qt 4 ]



Copyright © 2007 Trolltech Trademarks
Qt 4.3.2