Кроссплатформенные средства Qt 4 поддержки людей с ограниченными возможностямиQt 4 позволяет разработчикам писать кроссплатформенные приложения, которые доступны для использования людей с ослабленным зрением, а также для других пользователей с ограниченными возможностями. Такой подход Qt позволяет создавать приложения, доступные для большего количества пользователей и выйти на рынок правительственных заказов, где специальные возможности - частое требование. Общий обзорСо времен Qt 3 классы поддержки людей с ограниченными возможностями были расширены различными способами. Мы добавили новые функции и новые значения перечислений, и пересмотрели API для того, чтобы сделать их более совместимой с остальными частями Qt. Мы также добавили свойства в QWidget, accessibleName и accessibleDescription, которые можно установить в Qt Designer для того, чтобы хранить вспомогательный текст без необходимости писать дополнительный код. Архитектура поддержки людей с ограниченными возможностями в Qt следующая: Qt предоставляет один общий интерфейс QAccessibleInterface, в который можно обернуть любые виджеты и объекты (например, QPushButton). Этот единственный интерфейс предоставляет все метаданные, необходимые для вспомогательных технологий. Qt предоставляет поддержку этого интерфейса для своих встроенных виджетов в виде подключаемых модулей (плагинов). Более детальный обзор поддержки специальных возможностей в Qt можно найти на странице Специальные возможности. Включение поддержки специальных возможностейПо умолчанию, на Windows и Mac OS X приложения Qt запускаются с включенной поддержкой специальных возможностей. На платформах Unix/X11, приложения должны быть запущенны в окружении с переменной QT_ACCESSIBILITY с установленной в 1. Например, это устанавливается следующим образом в командном интерпретаторе bash: export QT_ACCESSIBILITY=1 Средства специальных возможностей собираются в 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 ¶ms); ... }; Здесь показано, как можно реализовать функцию doAction() для вызова функции именуемой click() для оборачиваемого объекта MyWidget, когда пользователь вызывает для объекта действие по умолчанию или "нажимает" его. bool MyWidgetInterface::doAction(int action, int child, const QVariantList ¶ms) { 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, MyFactory) |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |