![]() |
Главная · Все классы · Основные классы · Классы по группам · Модули · Функции | ![]() |
[Предыдущая: Новый Qt Designer] [Начало] [Следующая: Поддержка GUI баз данных в 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 ¶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)
[Предыдущая: Новый Qt Designer] [Начало] [Следующая: Поддержка GUI баз данных в Qt 4]
Copyright © 2008 Trolltech | Торговые марки | Qt 4.3.5 |