Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 105

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

β€’ Q_OS_SOLARIS

β€’ Q_OS_ULTRIX

β€’ Q_OS_UNIXWARE

β€’ Q_OS_WIN32

β€’ Q_OS_WIN64

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих символов Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Для удобства Qt Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт Q_OS_WIN, ΠΊΠΎΠ³Π΄Π° обнаруТиваСтся Win32 ΠΈΠ»ΠΈ Win64, ΠΈ Q_OS_UNIX, ΠΊΠΎΠ³Π΄Π° обнаруТиваСтся любая опСрационная систСма Ρ‚ΠΈΠΏΠ° Unix (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Linux ΠΈ Mac OS X). Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ QSysInfo::WindowsVersion ΠΈΠ»ΠΈ QSysInfo::MacintoshVersion для установки ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ вСрсиями Windows (2000, ME ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅) ΠΈΠ»ΠΈ Mac OS X (10.2, 10.3 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅).

ΠšΡ€ΠΎΠΌΠ΅ макросов ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСм сущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ ряд макросов компилятора. НапримСр, Q_CC_MSVC опрСдСляСтся Π² Ρ‚ΠΎΠΌ случаС, Ссли компилятором являСтся Visual Π‘++ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft. Π’Π°ΠΊΠΈΠ΅ макросы ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° приходится ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки компилятора.

НСсколько классов графичСского ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Qt ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ зависимыС ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ описатСли (handle) Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Они пСрСчислСны Π½Π° рис. 20.2:

Mас OS X:

β€’ ATSFontFormatRef QFont::handle();

β€’ CGImageRef QPixmap::macCGHandle();

β€’ GWorldPtr QPixmap::macQDAlphaHandle();

β€’ GWorldPtr QPixmap::macQDHandle();

β€’ RgnHandle QRegion::handle();

β€’ HIViewRef QWidget::winId();

Windows:

β€’ HCURSOR QCursor::handle();

β€’ HDC QPaintEngine::getDC();

β€’ HDC QPrintEngine::getPrinterDC();

β€’ HFONT QFont::handle();

β€’ HPALETTE QColormap::hPal();

β€’ HRGN QRegion::handle();

β€’ HWND QWidget::winId();

X11:

β€’ Cursor QCursor::handle();

β€’ Font QFont::handle();

β€’ Picture QPixmap::x11PictureHandle();

β€’ Picture QWidget::x11PictureHandle();

β€’ Pixmap QPixmap::handle();

β€’ QX11Info QPixmap::x11Info();

β€’ QX11Info QWidget::x11Info();

β€’ Region QRegion::handle();

β€’ Screen QCursor::x11Screen();

β€’ SmcConn QSessionManager::handle();

β€’ Window QWidget::handle();

β€’ Window QWidget::winId();

Π’ систСмС 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:

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