Чтение онлайн

ЖАНРЫ

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

Наш первый пример встраивает 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<QVariant>,

• SAFEARRAY(BSTR) — QStringList,

• SAFEARRAY(BYTE) — QByteArray,

• VARIANT — QVariant,

• IFontDisp * — QFont,

• IPictureDisp * — QPixmap,

• Тип, определяемый пользователем — QRect, QSize, QPoint.

Например, входной параметр типа VARIANT_BOOL становится типом bool, а выходной параметр типа VARIANT_BOOL становится типом bool &. Ecли пoлyчeнный тип являeтcя клaccoм Qt (QString, QDateTime и так далее), входной параметр становится ссылкой с модификатором const (например, const QString &).

Для получения списка всех свойств, сигналов и слотов, доступных в объектах QAxObject или QAxWidget вместе с их типами Qt, сделайте вызов функции QAxBase::generateDocumentation или используйте утилиту командной строки Qt dumpdoc, расположенную в каталоге Qt tools\activeqt\dumpdoc.

Теперь продолжим рассмотрение конструктора PlayerWindow:

05 wmp->setProperty("ShowControls", false);

06 wmp->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

07 connect(wmp, SIGNAL(PlayStateChange(int, int)),

08 this, SLOT(onPlayStateChange(int, int)));

09 connect(wmp, SIGNAL(ReadyStateChange(ReadyStateConstants)),

10 this, SLOT(onReadyStateChange(ReadyStateConstants)));

11 connect(wmp, SIGNAL(PositionChange(double, double)),

12 this, SLOT(onPositionChange(double, double)));

После вызова QAxWidget::setControl мы вызываем функцию QObject::setProperty для установки свойства ShowControls (отображать элементы управления) элемента управления Media Player системы Windows на значение false, поскольку мы предоставляем свои собственные кнопки для работы с компонентом. Функция QObject::setProperty может использоваться как для свойств СОМ, так и для обычных свойств Qt. Ее второй параметр имеет тип QVariant.

Поделиться с друзьями: