Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |
[Предыдущая: Новый 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. Мы также добавили свойства accessibleName и accessibleDescription к QWidget, которые можно изменить в Qt Designer для того, чтобы хранить вспомогательный текст без необходимости писать дополнительный код.
Архитектура достижения кросс-платформенности Qt следующая: Qt предоставляет один родовой интерфейс QAccessibleInterface в который можно обернуть любые виджеты и объекты (например QPushButton). Этот единстеннвй интерфейс предоставляет все метаданные необходимые для вспомогательных технологий. Qt предоставляет поддержку этого интерфейса для своих встроенных виджетов в виде плагинов.
При создании собственных виджетов вы можете создавать свои подклассы QAccessibleInterface и распространять их как плагины (с использованием QAccessiblePlugin) или включать их в приложение. Аналогично, поддержка мультиплатформенности Qt может быть сделана как подключаемая (по умолчанию) или втроенная в библиотеку Qt. Основное преимущество использования плагинов заключается в том, что классы совместимости загружаются в память только если есть в них потребность, а в обычном случае (если никакая вспомогательная технология не используется, они не замедляют работу.
В дополнение к QAccessibleInterface Qt два класса, предназначенных для облегчения работы: QAccessibleObject и QAccessibleWidget, которые предоставляют минимальный набор общих значений метаданных (например: геометрия виджета, заголовок окна, текст краткой подсказки). Вы можете использовать их как при создании оболочек для ваших пользовательских подклассов QObject или QWidget.
Другая особенность Qt 4 - это то, что Qt способен поддерживать в дополнение к стандартным другие исключения. Это можно сделать создав подкласс 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_PLUGIN(MyFactory)
[Предыдущая: Новый Qt Designer] [Начало] [Далее: Поддержка GUI Баз Данных в Qt 4]
Copyright © 2005 Trolltech | Trademarks | Qt 4.1.0 |