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

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

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

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Qtopia Core ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСимущСства ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, присущих Ρ‚Π°ΠΊΠΆΠ΅ вСрсиям Qt для Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Π² частности ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся нСявноС совмСстноС использованиС Π΄Π°Π½Π½Ρ‹Ρ… (Β«ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ записи») ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ экономии основной памяти, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ стили Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса QStyle ΠΈ обСспСчиваСтся систСма ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ максимально ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пространство экрана.

Qtopia Core прСдставляСт собой Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ строятся Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСдлоТСния ΠΏΠΎ встроСнным систСмам ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«TrolltechΒ»; ΠΊ Π½ΠΈΠΌ относятся Qtopia Platform, Qtopia PDA ΠΈ Qtopia Phone. Они содСрТат классы ΠΈ прилоТСния, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств ΠΈ способныС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ машинами Java нСзависимых Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ знакомство с Qtopia

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Qtopia Core ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств. НаиболСС распространСно построСниС кросс-компилятора GNU Π‘++ Π² систСмС Unix. Π­Ρ‚ΠΎΡ‚ процСсс упрощаСтся благодаря Π½Π°Π»ΠΈΡ‡ΠΈΡŽ скрипта ΠΈ Π½Π°Π±ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π”Π°Π½Π° КСгСля (Dan Kegel), доступного Π½Π° Π²Π΅Π±-страницС http://kegel.com/crosstool/. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Qtopia Core ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс Qt, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Qt для Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Qt/X11 ΠΈΠ»ΠΈ Qt/Windows.

БистСма ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Qtopia Core ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ кросс-компиляторы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ β€”embedded скрипта configure. НапримСр, для построСния ARMβ€”Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

./configure -embedded arm

МоТно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡƒΡ‚Π΅ΠΌ добавлСния Π½ΠΎΠ²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Qt mkspecs/qws.

Qtopia Core рисуСт нСпосрСдствСнно Π² Π±ΡƒΡ„Π΅Ρ€Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ² систСмы Linux (ΠΎΠ±Π»Π°ΡΡ‚ΡŒ основной памяти, связанная с дисплССм). Для обращСния ΠΊ Π±ΡƒΡ„Π΅Ρ€Ρƒ Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, потрСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для записи Π½Π° устройство /dev/fb0.

Для выполнСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Qtopia Core сначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ процСсс, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСрвСра. Π­Ρ‚ΠΎΡ‚ сСрвСр ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° распрСдСлСниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ областСй экрана ΠΈ Π·Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ событий ΠΌΡ‹ΡˆΠΊΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π›ΡŽΠ±ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Qtopia Core ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ сСрвСром, Ссли Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ β€”qws ΠΈΠ»ΠΈ Π² качСствС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктора QApplication ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ QApplication::GuiServer.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ прилоТСния ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ с сСрвСром Qtopia Core ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ области Π² основной памяти. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рисования Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ€ΠΈΡΡƒΡŽΡ‚ самих сСбя Π² совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ области памяти ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ собствСнных ΠΎΠΊΠΎΠ½. Π­Ρ‚ΠΎ сводит ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ объСм Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ сСрвСром, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Qtopia Core ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€ΠΈΡΠΎΠ²Π°Π»ΡŒΡ‰ΠΈΠΊ QPainter для рисования самих сСбя, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ нСпосрСдствСнный доступ ΠΊ Π²ΠΈΠ΄Π΅ΠΎΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс QDirectPainter.

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° QCOP. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π», создавая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QCopChannel ΠΈ устанавливая связь с Π΅Π³ΠΎ сигналом received(). НапримСр:

QCopChannel *channel = new QCopChannel("System", this);

connect(channel, SIGNAL(received(const QString &, const QByteArray &)),

this, SLOT(received(const QString &, const QByteArray &)));

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ QCOP состоит ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ массива QByteArray. БтатичСская функция QCopChannel::send() ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π² ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ сообщСниС ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ. НапримСр:

QByteArray data;

QDataStream out(&data, QIODevice::WriteOnly);

out << QDateTime::currentDateTime();

QCopChannel::send("System", "clockSkew(QDateTime)", data);

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ: для кодирования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊ QDataStream, ΠΈ для гарантирования ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ массива Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… Π² сообщСнии ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²ΠΈΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘++.

На Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Qtopia Core Π²Π»ΠΈΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды. НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ QWS_MOUSE_PROTO ΠΈ QWS_KEYBOARD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚ΠΈΠΏ устройства ΠΌΡ‹ΡˆΠΊΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды приводится Π½Π° Π²Π΅Π±-страницС http://doc.trolltech.com/4.1/emb-envvars.html.

Если Π² качСствС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Unix, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с использованиСм Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ² Qtopia (qvfb) β€” прилоТСния X11, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ пиксСль Π·Π° пиксСлСм Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ². Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСт Ρ†ΠΈΠΊΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² Qtopia Core Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ β€”qvfb скрипту configure. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ эта опция Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ примСнСния. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ² располагаСтся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ tools/qvfb ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

qvfb -width 320 -height 480 -depth 32

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, являСтся VNC (Virtual Network Computing β€” вычислСниС Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ сСти), которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ выполнСния прилоТСния. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ VNC Π² Qtopia Core ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ β€”qtβ€”gfxβ€”vnc Π² скрипт configure. Π—Π°Ρ‚Π΅ΠΌ запуститС вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Qtopia Core с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки β€”display VNC:0 ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° VNC, ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° хост, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π Π°Π·ΠΌΠ΅Ρ€ экрана ΠΈ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды QWS_SIZE ΠΈ QWS_DEPTH Π½Π° хостС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ прилоТСния Qtopia Core (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, QWS_SIZE=320x480 ΠΈ QWS_DEPTH=32).

Настройка Qtopia Core

ΠŸΡ€ΠΈ установкС Qtopia Core ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ расход памяти. Π’ состав Qtopia Core Π²Ρ…ΠΎΠ΄ΠΈΡ‚ сотня ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… соотвСтствуСт ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ прСпроцСссорный символ. НапримСр, QT_NO_FILEDIALOG ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ класс QFileDialog ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ QtGui, a QT_NO_I18N удаляСт всю ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСчислСны Π² Ρ„Π°ΠΉΠ»Π΅ src/corelib/qfeatures.txt.

Qtopia Core содСрТит ΠΏΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (minimum, small, medium, large ΠΈ dist), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Ρ„Π°ΠΉΠ»Π°Ρ… src/corelib/qconfig_xxx.h. Π­Ρ‚ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΠΈ β€”qconfig xxx для скрипта configure, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

./configure -qconfig small

Для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» qconfigβ€”xxx.h ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ опрСдСляСт ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. МоТно ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ qconfig, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Qt tools.

Qtopia Core прСдоставляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы для интСрфСйса с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ устройствами ΠΈ для настройки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмы:

β€’ QScreen β€” Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ экрана,

β€’ QScreenDriverPlugin β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² экрана,

β€’ QWSMouseHandler β€” Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΌΡ‹ΡˆΠΊΠΈ,

β€’ QMouseDriverPlugin β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΌΡ‹ΡˆΠΊΠΈ,

β€’ QWSKeyboardHandler β€” Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹,

β€’ QKbdDriverPlugin β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹,

β€’ QWSInputMethod β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Π²ΠΎΠ΄Π°,

β€’ QDecoration β€” стили оформлСния ΠΎΠΊΠΎΠ½,

β€’ QDecorationPlugin β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ стилСй оформлСния ΠΎΠΊΠΎΠ½.

Для получСния списка Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Π²ΠΎΠ΄Π° ΠΈ стилСй оформлСния экрана запуститС скрипт configure с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ β€”help.

Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ экрана ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки β€”display ΠΏΡ€ΠΈ запускС сСрвСра Qtopia Core, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΈΠ»ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ установки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды QWS_DISPLAY. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΌΡ‹ΡˆΠΊΠΈ ΠΈ связанноС с Π½ΠΈΠΌ устройство ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды QWS_MOUSE_PROTO, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ задаСтся Π² Π²ΠΈΠ΄Π΅ Ρ‚ΠΈΠΏ:устройство, Π³Π΄Π΅ Ρ‚ΠΈΠΏ β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², Π° устройство β€” ΠΏΡƒΡ‚ΡŒ ΠΊ устройству (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, QWS_MOUSE_PROTO=IntelliMouse:/dev/mouse). ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды QWS_KEYBOARD. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Π²ΠΎΠ΄Π° ΠΈ оформлСния ΠΎΠΊΠΎΠ½ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Π² сСрвСрС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ QWSServer::setCurrentInputMethod() ΠΈ QApplication::qwsSetDecoration().

Π‘Ρ‚ΠΈΠ»ΠΈ оформлСния ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ стиля Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт класс QStyle. НапримСр, Π²ΠΏΠΎΠ»Π½Π΅ допускаСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Windows Π² качСствС стиля оформлСния ΠΎΠΊΠΎΠ½ ΠΈ Plastique Π² качСствС стиля Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ свой ΡΡ‚ΠΈΠ»ΡŒ оформлСния.

Класс QWSServer содСрТит Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ настройкС ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмы. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊ сСрвСр Qtopia Core, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ экзСмпляру QWSServer Ρ‡Π΅Ρ€Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ qwsServer, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ конструктор QApplication.