| 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 |