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

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

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

12 }

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ возмоТности Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для размСщСния Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСкста. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈ, Ссли тСкст оказываСтся слишком большим, Π²Ρ…ΠΎΠ΄ΠΈΠΌ Π² Ρ†ΠΈΠΊΠ», Π³Π΄Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ окаТСтся подходящим ΠΈΠ»ΠΈ Π½Π΅ достигнСт 9 Ρ‚ΠΎΡ‡Π΅ΠΊ, Ρ‡Ρ‚ΠΎ соотвСтствуСт Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ.

13 QPixmap pixmap(size);

14 QPainter painter(&pixmap);

15 painter.setFont(myFont);

16 painter.setPen(pen);

17 painter.setBrush(brush);

18 painter.setRenderHint(QPainter::Antialiasing, true);

19 painter.setRenderHint(QPainter::TextAntialiasing, true);

20 painter.setRenderHint(QPainter::SmoothPixmapTransform, true);

21 painter.eraseRect(pixmap.rect());

ΠœΡ‹ создаСм ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Ρ€ΠΈΡΠΎΠ²Π°Π»ΡŒΡ‰ΠΈΠΊ для рисования Π½Π° пиксСльной ΠΊΠ°Ρ€Ρ‚Π΅. Π’Π°ΠΊΠΆΠ΅ устанавливаСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности воспроизвСдСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ максимальноС сглаТиваниС ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ тСкста. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ eraseRect() ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ, заполняя Π΅Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Ρ„ΠΎΠ½Π°.

22 if (effect == "Plain") {

23 painter.setPen(Qt::NoPen);

24 } else if (effect == "Outline") {

25 QPen pen(Qt::black);

26 pen.setWidthF(2.5);

27 painter.setPen(pen);

28 } else if (effect == "Shadow") {

29 QPainterPath path;

30 painter.setBrush(Qt::darkGray);

31 path.addText(((size.width() - metrics.width(text)) / 2) + 3,

32 (size.height() - metrics.descent()) + 3, myFont, text);

33 painter.drawPath(path);

34 painter.setBrush(brush);

35 }

Для эффСкта Β«PlainΒ» (простой) Π½Π΅ трСбуСтся Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°ΠΌΠΊΠΈ. Для эффСкта Β«OutlineΒ» (Ρ€Π°ΠΌΠΊΠ°) ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ исходноС ΠΏΠ΅Ρ€ΠΎ ΠΈ создаСм нашС собствСнноС ΠΏΠ΅Ρ€ΠΎ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ Π² 2.5 пиксСля. Для эффСкта Β«ShadowΒ» (Ρ‚Π΅Π½ΡŒ) сначала рисуСтся Ρ‚Π΅Π½ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст ΠΏΠΎΠ²Π΅Ρ€Ρ… Π½Π΅Π΅.

36 QPainterPath path;

37 path.addText((size.width() - metrics.width(text)) / 2,

38 size.height() - metrics.descent(), myFont, text);

39 painter.drawPath(path);

40 return pixmap;

41 }

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€ΠΎ ΠΈ кисти, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ установлСнныС для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ тСкстового эффСкта, Π° для эффСкта Β«ShadowΒ» нарисована Ρ‚Π΅Π½ΡŒ. ПослС этого ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ воспроизвСсти тСкст. ВСкст цСнтрируСтся ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ выводится достаточно Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ достаточно мСста для размСщСния Π½ΠΈΠΆΠ½ΠΈΡ… выносных элСмСнтов.

Q_EXPORT_PLUGIN2(basiceffectsplugin, BasicEffectsPlugin)

Π’ ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π° .cpp ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ макрос Q_EXPORT_PLUGIN2(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ элСмСнт Π±Ρ‹Π» доступСн для Qt.

Π€Π°ΠΉΠ» .pro Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ»Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ использовали Ρ€Π°Π½Π΅Π΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля курсоров Windows:

TEMPLATE = lib

CONFIG += plugin

HEADERS = ../textart/textartinterface.h \

basiceffectsplugin.h

SOURCES = basiceffectsplugin.cpp

DESTDIR =../textart/plugins

Если данная Π³Π»Π°Π²Π° повысила ваш интСрСс ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ модулям, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ Π² Qt Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Plug & Paint (ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ рисуй). ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… интСрфСйса ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Plugin Information (информация ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… модулях), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит списки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ интСрфСйсов, доступных Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π“Π»Π°Π²Π° 20. ВозмоТности, зависимыС ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступныС программистам Qt возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с рассмотрСния способов доступа ΠΊ Ρ‚Π°ΠΊΠΈΠΌ Β«Ρ€ΠΎΠ΄Π½Ρ‹ΠΌΒ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ интСрфСйсам, ΠΊΠ°ΠΊ Win32 API Π² систСмС Windows, Carbon Π² систСмС Mac OS X ΠΈ Xlib Π² систСмС X11. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ActiveQt, дСмонстрируя способы примСнСния элСмСнтов управлСния ActiveX Π² прилоТСниях Qt, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² систСмС Windows, Π° Ρ‚Π°ΠΊΠΆΠ΅ способы создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСрвСров ActiveX. Π’ послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим способы взаимодСйствия ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Qt с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ сСансов систСмы X11.

ΠšΡ€ΠΎΠΌΠ΅ прСдставлСнных здСсь возмоТностСй компания Β«TrolltechΒ» ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСсколько зависимых ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Qt Solutions, Π² частности ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ Qt/Motif ΠΈ Qt/MFC, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² Qt ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Motif/Xt ΠΈ MFC. ПодобноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Tcl/Tk обСспСчиваСтся Ρ„ΠΈΡ€ΠΌΠΎΠΉ Β«FroglogicΒ», Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Β«Klaralvdalens DatakonsultΒ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€ рСсурсов Windows ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅Π±-страницах:

β€’ http://www.trolltech.com/products/solutions/catalog/

β€’ http://www.froglogic.com/tq/

β€’ http://www.kdab.net/knut/

Для встроСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ компания Β«TrolltechΒ» обСспСчиваСт Qtopia β€” Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ срСду для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Она рассматриваСтся Π² Π³Π»Π°Π²Π΅ 21.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Β«Ρ€ΠΎΠ΄Π½Ρ‹Ρ…Β» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… интСрфСйсов

ВсСсторонний ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс Qt удовлСтворяСт Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ, платформозависимый ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс. Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ продСмонстрируСм способы примСнСния Β«Ρ€ΠΎΠ΄Π½Ρ‹Ρ…Β» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… интСрфСйсов Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Qt, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ класс QWidget ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ winId(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΎΠΊΠ½Π°. QWidget Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ find(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ QWidget с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ этот ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ функциям Β«Ρ€ΠΎΠ΄Π½ΠΎΠ³ΠΎΒ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ интСрфСйса для достиТСния эффСктов, зависимых ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция winId() для отобраТСния слСва Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Β«Ρ€ΠΎΠ΄Π½Ρ‹Π΅Β» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Mac OS X:

#ifdef Q_WS_MAC

ChangeWindowAttributes(HIViewGetWindow(HIViewRef(toolWin.winId())),

kWindowSideTitlebarAttribute, kWindowNoAttributes);

#endif

Рис. 20.1. Окно ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Mac OS X с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° сбоку.

НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π² систСмС X11 ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свойство ΠΎΠΊΠ½Π°:

#ifdef Q_WS_X11

Atom atom = XInternAtom(QX11Info::display(), "MY_PROPERTY", False);

long data = 1;

XChangeProperty(QX11Info::display(), window->winId(), atom, atom,

32, PropModeReplace, reinterpret_cast<uchar *>(&data), 1);

#endif

ИспользованиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² #ifdef ΠΈ #endif Π²ΠΎΠΊΡ€ΡƒΠ³ зависимого ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ прилоТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π² прилоТСниях, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Windows, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ GDI для рисования Π½Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ Qt:

01 void GdiControl::paintEvent(QPaintEvent * /* event */)

02 {

03 RECT rect;

04 GetClientRect(winId(), &rect);

05 HDC hdc = GetDC(winId());

06 FillRect(hdc, &rect, HBRUSH(COLOR_WINDOW + 1));

07 SetTextAlign(hdc, TA_CENTER | TA_BASELINE);

08 TextOutW(hdc, width() / 2, height() / 2,

09 text.utf16(), text.size());

10 ReleaseDC(winId(), hdc);

11 }

Π§Ρ‚ΠΎΠ±Ρ‹ это сработало, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QPaintDevice::paintEngine() для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Qt::WA_PaintOnScreen Π² конструкторС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ QPainter ΠΈ GDI Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события рисования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getDC() ΠΈ releaseDC() класса QPaintEngine:

01 void MyWidget::paintEvent(QPaintEvent * /* event */)

02 {

03 QPainter painter(this);

04 painter.fillRect(rect().adjusted(20, 20, -20, -20), Qt::red);

05 #ifdef Q_WS_WIN

06 HDC hdc = painter.paintEngine()->getDC();

07 Rectangle(hdc, 40, 40, width() - 40, height() - 40);

08 painter.paintEngine()->releaseDC();

09 #endif

10 }

ПодобноС совмСщСниС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² QPainter ΠΈ GDI ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ странный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, особСнно ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·ΠΎΠ²Ρ‹ QPainter Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ послС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² GDI, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ QPainter Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдполоТСния ΠΎ состоянии Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ уровня рисования.

Qt опрСдСляСт ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… символов ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмы: Q_WS_WIN, Q_WS_X11, Q_WS_MAC ΠΈ Q_WS_QWS (Qtopia). ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Qt ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм Π² прилоТСниях. Qt Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт прСпроцСссорныС символы для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы:

β€’ Q_OS_AIX

β€’ Q_OS_BSD4

β€’ Q_OS_BSDI

β€’ Q_OS_CYGWIN

β€’ Q_OS_DGUX

β€’ Q_OS_DYNIX

β€’ Q_OS_FREEBSD

β€’ Q_OS_HPUX

β€’ Q_OS_HURD

β€’ Q_OS_IRIX

β€’ Q_OS_LINUX

β€’ Q_OS_LYNX

β€’ Q_OS_MAC

β€’ Q_OS_NETBSD

β€’ Q_OS_OPENBSD

β€’ Q_OS_OS2EMX

β€’ Q_OS_OSF

β€’ Q_OS_QNX6

β€’ Q_OS_QNX

β€’ Q_OS_RELIANT

β€’ Q_OS_SCO