13 QString IconEditorPlugin::group() const
14 {
15 return tr("Image Manipulation Widgets");
16 }
Π€ΡΠ½ΠΊΡΠΈΡ group() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ Π³ΡΡΠΏΠΏΡ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ², ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΈΠΌΡ Π΅ΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Qt Designer coΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ Π³ΡΡΠΏΠΏΡ Π΄Π»Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
17 QIcon IconEditorPlugin::icon() const
18 {
19 return QIcon(":/images/iconeditor.png");
20 }
Π€ΡΠ½ΠΊΡΠΈΡ icon() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Qt Designer. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ IconEditorPlugin ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΡΡΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Qt, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌ.
21 QString IconEditorPlugin::toolTip() const
22 {
23 return tr("An icon editor widget");
24 }
Π€ΡΠ½ΠΊΡΠΈΡ toolTip() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡΡΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ΅ Π² ΠΏΠ°Π½Π΅Π»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Qt Designer.
25 QString IconEditorPlugin::whatsThis() const
26 {
27 return tr("This widget is presented in Chapter 5 of <i>C++ GUI "
28 "Programming with Qt 4</i> as an example of a custom Qt "
29 "widget.");
30 }
Π€ΡΠ½ΠΊΡΠΈΡ whatsThis() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡ Β«What's This?Β» (ΡΡΠΎ ΡΡΠΎ?) Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Qt Designer.
31 bool IconEditorPlugin::isContainer() const
32 {
33 return false;
34 }
Π€ΡΠ½ΠΊΡΠΈΡ isContainer() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ false. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, QFrame ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ. Π ΡΠ΅Π»ΠΎΠΌ Π»ΡΠ±ΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ, Π½ΠΎ Qt Designer Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ isContainer() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ false.
35 QWidget *IconEditorPlugin::createWidget(QWidget *parent)
36 {
37 return new IconEditor(parent);
38 }
Π€ΡΠ½ΠΊΡΠΈΡ createWidget() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Qt Designer Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
39 Q_EXPORT_PLUGIN2(iconeditorplugin, IconEditorPlugin)
Π ΠΊΠΎΠ½ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡ Q_EXPORT_PLUGIN2(), ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ Qt Designer. ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΈΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΠΉΠ» .pΠ³ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
TEMPLATE = lib
CONFIG += designer plugin release
HEADERS = ../iconeditor/iconeditor.h \
iconeditorplugin.h
SOURCES = ../iconeditor/iconeditor.cpp \
iconeditorplugin.cpp
RESOURCES = iconeditorplugin.qrc
DESTDIR = $(QTDIR)/plugins/designer
Π€Π°ΠΉΠ» .pro ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ QTDIR ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Qt. ΠΠΎΠ³Π΄Π° Π²Ρ Π²Π²ΠΎΠ΄ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make ΠΈΠ»ΠΈ nmake Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ plugins Qt Designer. ΠΠΎΠ»Π΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΠΈΠ΄ΠΆΠ΅Ρ IconEditor ΠΌoΠΆeΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Qt Designer ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠ°ΠΊ, Π»ΡΠ±ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ Qt.
ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π² Qt Designer Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ², Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈΠ±ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ , Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ QDesignerCustomWidgetCollectionInterface.
ΠΠ²ΠΎΠΉΠ½Π°Ρ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ
ΠΠ²ΠΎΠΉΠ½Π°Ρ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Π²Π½Π΅ ΡΠΊΡΠ°Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΡ, ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΡΠ° ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½Π°Ρ ΠΊΠ°ΡΡΠ° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½. Π ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ Qt ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π Qt 4 ΠΊΠ»Π°ΡΡ QWidget ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΡΠ΅Π΄ΠΊΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ ΠΌΠ΅ΡΡΠ°Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ². ΠΡΠ΅ ΠΆΠ΅ ΡΠ²Π½Π°Ρ Π΄Π²ΠΎΠΉΠ½Π°Ρ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈ ΡΡΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ²Π° ΠΎΡΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΡΡ Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π½Π°ΠΌΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΡΠ΅ΡΡΠΈΡΡ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ Π»Π΅Π½ΡΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
ΠΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ Π΄Π°Π½Π½ΡΡ Π³Π»Π°Π²Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Plotter (ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠ²). ΠΡΠΎΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π²ΠΎΠΉΠ½ΡΡ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ QtβΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΡΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠΈΠ΄ΠΆΠ΅Ρ Plotter Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΡΠΈΠ²ΡΡ , Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ Π΅Π΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ΅ΡΡΠΈΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ Π»Π΅Π½ΡΡ, ΠΈ Plotter ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡ ΠΊΡΡΠΏΠ½ΡΠΌ ΠΏΠ»Π°Π½ΠΎΠΌ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² Π½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡΡ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΡΠ΅ΡΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ Π»Π΅Π½ΡΡ, Π΄Π΅Π»Π°Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΅Π»ΡΠΎΠΊ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Ρ Π·Π°ΡΠ΅ΠΌ ΠΌΡΡΠΊΡ Ρ Π½Π°ΠΆΠ°ΡΠΎΠΉ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Π² Π΄ΡΡΠ³ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΌΡΡΠΊΠΈ.
Π ΠΈΡ. 5.7. Π£Π²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Plotter.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ Π»Π΅Π½ΡΡ, ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Zoom Out (ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅) ΠΈ Π·Π°ΡΠ΅ΠΌ Π²Π½ΠΎΠ²Ρ Π΅Π³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Zoom In (ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅). ΠΠ½ΠΎΠΏΠΊΠΈ Zoom In ΠΈ Zoom Out ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΡΠ°Π±Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΡΠ»ΠΎΠ½ΡΡΡ ΡΠΊΡΠ°Π½, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΌΠ°ΡΡΡΠ°Π± ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ.
ΠΠΈΠ΄ΠΆΠ΅Ρ Plotter ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΡΠΈΠ²ΡΡ . ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ΅ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π³ΡΠ°ΡΠΈΠΊΠ° PlotSettings, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΌΠ°ΡΡΡΠ°Π±Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° plotter.h:
01 #ifndef PLOTTER_H
02 #define PLOTTER_H
03 #include <QMap>
04 #include <QPixmap>
05 #include <QVector>
06 #include <QWidget>
07 class QToolButton;
08 class PlotSettings;
09 class Plotter : public QWidget
10 {
11 Q_OBJECT
12 public:
13 Plotter(QWidget *parent = 0);
14 void setPlotSettings(const PlotSettings &settings);
15 void setCurveData(int id, const QVector<QPointF> &data);
16 void clearCurve(int id);
17 QSize minimumSizeHint() const;
18 QSize sizeHint() const;
19 public slots:
20 void zoomIn();
21 void zoomOut();
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ QtβΠΊΠ»Π°ΡΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠ², ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
Π ΠΊΠ»Π°ΡΡΠ΅ Plotter ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΡΠΈ ΠΎΡΠΊΡΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΈ Π΄Π²Π° ΠΎΡΠΊΡΡΡΡΡ ΡΠ»ΠΎΡΠ° Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ minimumSizeHint() ΠΈ sizeHint() ΠΊΠ»Π°ΡΡΠ° QWidget. ΠΡ Ρ ΡΠ°Π½ΠΈΠΌ ΡΠΎΡΠΊΠΈ ΠΊΡΠΈΠ²ΠΎΠΉ Π² Π²Π΅ΠΊΡΠΎΡΠ΅ QVector<QPointF>, Π³Π΄Π΅ QPointF β Π²Π΅ΡΡΠΈΡ QPoint Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ.
22 protected:
23 void paintEvent(QPaintEvent *event);
24 void resizeEvent(QResizeEvent *event);
25 void mousePressEvent(QMouseEvent *event);
26 void mouseMoveEvent(QMouseEvent *event);
27 void mouseReleaseEvent(QMouseEvent *event);
28 void keyPressEvent(QKeyEvent *event);
29 void wheelEvent(QWheelEvent *event);
Π Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ QWidget, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ.
30 private:
31 void updateRubberBandRegion();
32 void refreshPixmap();
33 void drawGrid(QPainter *painter);
34 void drawCurves(QPainter *painter);
35 enum { Margin = 50 };
36 QToolButton *zoomInButton;
37 QToolButton *zoomOutButton;
38 QMap<int, QVector<QPointF> > curveMap;
39 QVector<PlotSettings> zoomStack;
40 int curZoom;
41 bool rubberBandIsShown;
42 QRect rubberBandRect;
43 QPixmap pixmap;
44 };
Π Π·Π°ΠΊΡΡΡΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ βΡΠ»Π΅Π½ΠΎΠ². ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° Margin ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π²ΠΎΠΊΡΡΠ³ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ.
Π‘ΡΠ΅Π΄ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ βΡΠ»Π΅Π½ΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ pixmap, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ QPixmap. ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠΏΠΈΡ Π²ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ Π΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΡΠ°ΡΠΈΠΊ Π²ΡΠ΅Π³Π΄Π° ΡΠ½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΈΡΡΡ Π²Π½Π΅ ΡΠΊΡΠ°Π½Π° Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅, ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½Π°Ρ ΠΊΠ°ΡΡΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ.