• Модуль 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.

Перейти на страницу:

Похожие книги