[Предыдущая: Новый Qt Designer] [Начало] [Следующая: Поддержка GUI баз данных в Qt 4]
Кроссплатформенные средства Qt 4 поддержки людей с ограниченными возможностями
Qt 4 позволяет разработчикам писать кроссплатформенные приложения, которые доступны для использования людей с ослабленным зрением, а также для других пользователей с ограниченными возможностями. Такой подход Qt позволяет создавать приложения, доступные для большего количества пользователей и выйти на рынок правительственных заказов, где специальные возможности - частое требование.
Общий обзор
Со времен Qt 3 классы поддержки людей с ограниченными возможностями были расширены различными способами. Мы добавили новые функции и новые значения перечислений, и пересмотрели API для того, чтобы сделать их более совместимой с остальными частями Qt. Мы также добавили свойства в QWidget, accessibleName и accessibleDescription, которые можно установить в Qt Designer для того, чтобы хранить вспомогательный текст без необходимости писать дополнительный код.
Архитектура поддержки людей с ограниченными возможностями в Qt следующая: Qt предоставляет один общий интерфейс QAccessibleInterface, в который можно обернуть любые виджеты и объекты (например, QPushButton). Этот единственный интерфейс предоставляет все метаданные, необходимые для вспомогательных технологий. Qt предоставляет поддержку этого интерфейса для своих встроенных виджетов в виде подключаемых модулей (плагинов).
Более детальный обзор поддержки специальных возможностей в Qt можно найти на странице Специальные возможности.
Включение поддержки специальных возможностей
По умолчанию, приложения Qt запускаются в Windows и Mac OS X с включенной поддержкой специальных возможностей. На платформах 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 Designer] [Начало] [Следующая: Поддержка GUI баз данных в Qt 4]
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) |
Торговые марки |
Qt 4.5.3 |
|