• Модуль 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:
01 class PlayerWindow : public QWidget
02 {
03 Q_OBJECT
04 Q_ENUMS(ReadyStateConstants)
05 public:
06 enum PlayStateConstants {
07 Stopped = 0, Paused = 1, Playing = 2 };
08 enum ReadyStateConstants {
09 Uninitialized = 0, Loading = 1, Interactive = 3, Complete = 4 };
10 PlayerWindow();
11 protected:
12 void timerEvent(QTimerEvent *event);
13 private slots:
14 void onPlayStateChange(int oldState, int newState);
15 void onReadyStateChange(ReadyStateConstants readyState);
16 void onPositionChange(double oldPos, double newPos);
17 void sliderValueChanged(int newValue);
18 void openFile();
19 private:
20 QAxWidget *wmp;
21 QToolButton *openButton;
22 QToolButton *playPauseButton;
23 QToolButton *stopButton;
24 QSlider *seekSlider;
25 QString fileFilters;
26 int updateTimer;
27 };
Класс PlayerWindow наследует QWidget. Макрос Q_ENUMS(), расположенный сразу после Q_OBJECT, необходим для указания компилятору moc, что константы ReadyStateConstants, используемые в слоте onReadyStateChange(), имеют тип enum. В закрытой секции мы объявляем переменную—член QAxWidget *.
01 PlayerWindow::PlayerWindow()
02 {
03 wmp = new QAxWidget;
04 wmp->setControl("{22D6F312-B0F6-11D0-94AB-0080C74C7E95}");
Конструктор начинается с создания объекта QAxWidget для инкапсулирования элемента управления ActiveX Media Player системы Windows. Модуль QAxContainer состоит из трех классов: QAxObject инкапсулирует объект COM, QAxWidget инкапсулирует элемент управления ActiveX и QAxBase реализует основную функциональность СОМ для QAxObject и QAxWidget.
Мы вызываем функцию setControl() для объекта QAxWidget с идентификатором класса элемента управления Media Player 6.4 системы Windows. Это создает экземпляр требуемого компонента. С этого момента все свойства, события и методы элемента управления ActiveX доступны как свойства, сигналы и методы Qt объекта QAxWidget.
Рис. 20.4. Дерево наследования для модуля QAxContainer.
Типы данных СОМ автоматически преобразуются в соответствующие типы объектов, как показано на рис. 20.5:
• VARIANT_BOOL — bool,
• char, short, int, long — int,
• unsigned char, unsigned short, unsigned int, unsigned long — uint,
• float, double — double,
• CY — qlonglong, qulonglong,
• BSTR — QString,
• DATE — QDateTime, QDate, QTime,
• OLE_COLOR — QColor,
• SAFEARRAY(VARIANT) — QList,
• SAFEARRAY(BSTR) — QStringList,
• SAFEARRAY(BYTE) — QByteArray,
• VARIANT — QVariant,
• IFontDisp * — QFont,
• IPictureDisp * — QPixmap,
• Тип, определяемый пользователем — QRect, QSize, QPoint.