Π‘ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ, Π±Π΅Π»ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΡΠΎΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ ARGB, Π΅ΡΠ»ΠΈ Π½Π΅ Π·Π½Π°Π΅ΡΡ ΡΠ²Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΡΠΎΠ½Π°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΡΠ΅ΡΡΠΉ ΡΠ²Π΅Ρ (0x7F7F7F7F).
54 ++currentImageNo;
55 if (currentImageNo == numImages)
56 state = AfterLastImage;
57 return true;
58 }
ΠΠ°Π²Π΅ΡΡΠΈΠ² ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΡΠ°Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°.
01 bool CursorHandler::jumpToNextImage()
02 {
03 QImage image;
04 return read(&image);
05 }
Π€ΡΠ½ΠΊΡΠΈΡ jumpToNextImage() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΌΡ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ read() ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ QImage. Π Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π±Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°ΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΡΠ°ΠΉΠ»Π° .cur, Π΄Π»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°ΠΉΠ»Ρ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
01 void CursorHandler::readHeaderIfNecessary() const
02 {
03 if (state != BeforeHeader)
04 return;
05 quint16 reserved;
06 quint16 type;
07 quint16 count;
08 QDataStream in(device());
09 in.setByteOrder(QDataStream::LittleEndian);
10 in >> reserved >> type >> count;
11 in.skipRawData(16 * count);
12 if (in.status() != QDataStream::Ok || reserved != 0
13 || type != 2 || count == 0) {
14 enterErrorState();
15 return;
16 }
17 state = BeforeImage;
18 currentImageNo = 0;
19 numImages = int(count);
20 }
ΠΠ°ΠΊΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ readHeaderIfNecessary() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· imageCount() ΠΈ read(). ΠΡΠ»ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π° ΡΠΆΠ΅ Π±ΡΠ» ΠΏΡΠΎΡΠΈΡΠ°Π½, ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ BeforeHeader (ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ) ΠΈ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ , ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΡΡΡΠΎΡΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² ΡΠ°ΠΉΠ»Π΅) ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ BeforeImage (ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ). Π ΠΊΠΎΠ½ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠ°ΠΉΠ»Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
01 void CursorHandler::enterErrorState() const
02 {
03 currentImageNo = 0;
04 numImages = 0;
05 state = Error;
06 }
ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΉΠ» Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°, ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Error. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ.
01 QBitArray CursorHandler::readBitmap(int width, int height,
02 QDataStream &in) const
03 {
04 QBitArray bitmap(width * height);
05 quint8 byte;
06 quint32 word;
07 for (int i = 0; i < height; ++i) {
08 for (int j = 0; j < width; ++j) {
09 if ((j % 32) == 0) {
10 word = 0;
11 for (int k = 0; k < 4; ++k) {
12 in >> byte;
13 word = (word << 8) | byte;
14 }
15 }
16 bitmap.setBit(((height - i - 1) * width) + j,
17 word & 0x80000000);
18 word <<= 1;
19 }
20 }
21 return bitmap;
22 }
Π€ΡΠ½ΠΊΡΠΈΡ readBitmap() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΠΎΠΊ ΠΊΡΡΡΠΎΡΠ° AND ΠΈ XOR. ΠΡΠΈ ΠΌΠ°ΡΠΊΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π΄Π²ΡΠΌΡ Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΡΡΠΎΠΊΠΈ Π² Π½ΠΈΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π½ΠΈΠΆΠ½ΠΈΡ , Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π·Π΄Π΅ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π±Π°ΠΉΡΠΎΠ² Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°ΠΉΠ»Π°Ρ .cur. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ Π½Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ Π² Π²ΡΠ·ΠΎΠ²Π΅ setBit() ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΌΠ°ΡΠΊΠΈ ΠΏΠΎΠ±Π°ΠΉΡΠ½ΠΎ, ΡΠ΄Π²ΠΈΠ³Π°Ρ Π±ΠΈΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ°ΡΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΈΠΌ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° CursorHandler β ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΊΡΡΡΠΎΡΠΎΠ². ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Ρ ΠΎΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° QImageIOHandler, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° ΠΈΠ»ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΠΎ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΌΡ ΠΎΠ±ΡΠ°Π·ΡΡ: ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΊΠ»Π°ΡΡβΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ.
Π€Π°ΠΉΠ» .pro Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² .pro, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΡΠΎΡΡΠ°Π²:
TEMPLATE = lib
CONFIG += plugin
HEADERS = cursorhandler.h \
cursorplugin.h
SOURCES = cursorhandler.cpp \
cursorplugin.cpp
DESTDIR = $(QTDIR)/plugins/imageformats
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠ»Ρ .pro ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ app, Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ lib, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, Π° Π½Π΅ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘ΡΡΠΎΠΊΠ° Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ CONFIG ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Qt Π½Π° ΡΠΎ, ΡΡΠΎ Ρ Π½Π°Ρ Π½Π΅ ΠΏΡΠΎΡΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ»Π΅ΠΌΠ΅Π½Ρ DESTDIR ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Qt Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° plugins, ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π² plugins/imageformats. Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈ ΡΠΈΠΏΠΎΠ² ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ΅ http://doc.trolltech.com/4.1/plugins-howto.html. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ΅Π΄Ρ QTDIR ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Qt.
ΠΠ»Ρ Qt Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ (release) ΠΈ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΌ (debug) ΡΠ΅ΠΆΠΈΠΌΠ°Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΎΠ±Π΅ Π²Π΅ΡΡΠΈΠΈ Qt, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΊΠ°Π·Π°ΡΡ Π² ΡΠ°ΠΉΠ»Π΅ .pro ΡΡ ΠΈΠ· Π½ΠΈΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΡΡΡΠΎΠΊΡ
CONFIG += release
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Qt, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Qt Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² imageformats Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ). ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Qt ΠΈΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ plugins, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² application_dir/plugins/imageformats. ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Qt Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΏΠΎΠΈΡΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ QCoreApplication::addLibraryPath().
ΠΠ°ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ β ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π‘Π²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Qt Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ ΡΠ΅ΡΠ΅Π· Π΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, Π° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Text Art (ΠΈΡΠΊΡΡΡΡΠ²ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°), ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° ΡΠΈΡ. 19.3. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ; ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠΎ ΡΡΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠ° QListWidget.
Π ΠΈΡ. 19.3. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Text Art.
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Text Art ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ:
01 class TextArtInterface
02 {
03 public:
04 virtual ~TextArtInterface() { }
05 virtual QStringList effects() const = 0;
06 virtual QPixmap applyEffect(const QString &effect,
07 const QString &text,
08 const QFont &font,
09 const QSize &size,
10 const QPen &pen,
11 const QBrush &brush) = 0;
12 };
13 Q_DECLARE_INTERFACE(TextArtInterface,
14 "com.software-inc.TextArt.TextArtInterface/1.0")
Π ΠΊΠ»Π°ΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΠΏΠΈΡΠΎΠΊ QStringList, ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΆΠ°Π»ΠΎΠ²Π°Π»ΡΡ Π½Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ° Π² ΠΊΠ»Π°ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ effects() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ. ΠΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ»ΡΡΠ΅ΠΉ. ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΡΠΈ ΠΊΠ»ΡΡΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊΡΠΎΠ².