Саммерфилд Марк
Шрифт:
В системе X11 функции QPixmap::x11Info и QWidget::x11Info возвращают объект QX11Info, который обеспечивает различные указатели и описатели с помощью ряда функций, включая display, screen, colormap и visual. Мы можем использовать их для настройки графического контекста, например QWidget или QPixmap.
Приложениям Qt, которым необходимо взаимодействовать с другими инструментальными средствами и библиотеками, часто приходится осуществлять доступ к низкоуровневым событиям (XEvent в системе X11, MSG в системе Windows, Eventref в системе Mac OS X, QWSEvent для Qtopia), прежде чем они будут преобразованы в события QEvent. Мы можем делать это путем создания подкласса QApplication и переопределения соответствующего зависимого от платформы фильтра событий — одну из следующих функций: x11EventFilter, winEventFilter, macEventFilter и qwsEventFilter. Мы можем поступать по-другому и осуществлять доступ к зависимым от платформы событиям, которые передаются заданному QWidget путем переопределения какой-то одной из функций winEvent, x11Event, macEvent и qwsEvent. Это может пригодиться для обработки событий определенного типа, которые Qt обычно игнорирует, например события джойстика.
Более подробную информацию относительно применения зависимых от платформы средств, в том числе как развертывать приложения Qt на различных платформах, можно найти в сети Интернет по адресу http://doc.trolltech.com/4.1/win-system.html.
Применение ActiveX в системе Windows
Технология ActiveX компании Microsoft позволяет приложениям включать в себя компоненты интерфейса пользователя других приложений или библиотек. Она построена на применении технологии СОМ компании Microsoft и определяет один набор интерфейсов приложений, использующих компоненты, и другой набор интерфейсов приложений и библиотек, предоставляющих компоненты.
Версия Qt/Windows для настольных компьютеров (Desktop Edition) обеспечивает рабочую среду ActiveQt для «бесшовного соединения» ActiveX и Qt. ActiveQt состоит из двух модулей:
• Модуль QAxContainer позволяет нам использовать объекты СОМ и встраивать элементы управления ActiveX в приложения Qt.
• Модуль QAxServer позволяет нам экспортировать пользовательские объекты СОМ и элементы управления ActiveX, написанные с помощью средств разработки Qt.
Наш первый пример встраивает Media Player (медиаплеер) системы Windows вприложение Qt при помощи модуля QAxContainer. Приложение Qt добавляет кнопку Open, кнопку Play/Pause, кнопку Stop и ползунок в элемент управления ActiveX Media Player системы Windows.
Рис. 20.3. Приложение Media Player.
Главное окно приложения имеет тип PlayerWindow:
Класс PlayerWindow наследует QWidget. Макрос Q_ENUMS, расположенный сразу после Q_OBJECT, необходим для указания компилятору moc, что константы ReadyStateConstants, используемые в слоте onReadyStateChange, имеют тип enum. В закрытой секции мы объявляем переменную—член QAxWidget *.
Конструктор начинается с создания объекта QAxWidget для инкапсулирования элемента управления ActiveX Media Player системы Windows. Модуль QAxContainer состоит из трех классов: QAxObject инкапсулирует объект COM, QAxWidget инкапсулирует элемент управления ActiveX и QAxBase реализует основную функциональность СОМ для QAxObject и QAxWidget.