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