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

[Предыдущая: Новый 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. Основное преимущество использования подключаемых модулей заключается в том, что классы совместимости загружаются в память только если в них есть потребность; в обычном случае, если никакая вспомогательная технология не используется, они не замедляют работу.

В дополнение к QAccessibleInterface Qt включает два вспомогательных класса: 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);
 }

Для экспорта интерфейса виджета как подключаемого модуля, мы должны создать подкласс QAccessibleFactory:

 QStringList MyFactory::keys() const
 {
     return QStringList() << "MyWidget" << "MyOtherWidget";
 }

 QAccessibleInterface *MyFactory::create(const QString &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 © 2008 Trolltech Торговые марки
Qt 4.3.5