Embedded QT & QT PalmTop


¡@

¡@

 

QT¬O¤°麽¬Û«H¥Î¹LKDEªº¤H¤@©w¤£·|­¯¥Í¡C¦]爲QT¨Ï¥Î²³æ¡]C++ªº¤@ºØ©µ¦ù¡^¦P®É¤S¨ã¦³¸ó¥­»Oªº¯S©Ê¡A¥[¤WEmbeded QT¥»¨­¤£¥Î¨ìX11ªºªF¦è´N¥i¥H°µ¥XWindows¨Ó¡A©Ò¥H¥i¥H¦b«Ü§CªºµwÅé¤W¹B¦æ¡C²{¦b«Ü¦h¤H¤w¸g§âQT¥Î©óEmbedded ¨t²Î¤W¡C

 

³oùاڭ̨ӥÎPlamTop³o­Óµ{¦¡¨Ó§@¥Ü½d¡C­º¥ý¥ýÅý§Ú­Ì¬Ý¬ÝPlamTop³£¦³¨Ç¤°麽:

 

PlamTop¥»¨­¤w¸g¦³«Ü¦h«D±`§¹¾ãªºµ{¦¡¤F¡C¦ì§}¥»¡B¹q¸£¡B¥@¬Éªí¡B¤éµ{¦w±Æ¡BMPEG¡B¹Ï¹³¡BÁn­µ¡Bªí®æ¡BBrowser¡B¤å¥ó¹CÄý¡B¤å¦r½s¿è¡BTodoµ¥µ¥¡C·íµM¤]¤Ö¤£¤F¤@¤j°ïªº¹CÀ¸¡C¦]爲QTªºÃö«Y¡A¥u­n¿í´`I18N¡A´N¥i¥H«Ü»´ÃPªº°µ¥X¦h»y¨¥¨t²Î¡C¤]´N¬O»¡PlamTop¥»¨­´N¤w¸g´£¨Ñ¤F¤@­Ó«Ü¦nªº¤¤¤åÀô¹Ò¤F¡C¹ï©ó§Ú­Ì³o¨Ç»Ý­n¥Î¨ì¤¤¤åªº¤H¨Ó»¡¡A¥u­n¦A¥[¤W­Ó¤¤¤å¿é¤Jµ{¦¡¡A´N¤Ó§¹¬ü°Õ¡C¥¿¦b¦³ÂIÀYµhµ¹¦Û¤v¼g¤¤¤å¿é¤Jªkªº®É­Ô¡A¤S³Q§Úµo²{­ì¨Ó¦­´N¦³¤H¤w¸gÀ°§Ú­Ì°µ¦n¤F¡C¥u­n¤U¸üQPECIN ´N¦n¤F¡C¨º¬OSourceFabªº¤@­ÓProject¡C±Mªù´N¬O¦b¶}µoPlamTop¤Uªº¤¤¤å¿é¤Jªk°ÝÃD¡C

 

¬Ý¤F³o麽¦h¡A¤£ª¾¹D¤j®a¬O§_°Ê¤ß©O¡H¦n§a¡A²{¦b´N¨Ó±Ð±Ð¤j®a¦p¦ó¨Ó°µ§A¦Û¤vªºQT embedded system¡C·íµM¡A§A¤]¤£¤@©w«Dµ¹­n¦³iPAQ¤~¥i¥H¡CQT¥»¨­¬O¥i¥H¸ó¥­»Oªº¡A©Ò¥H§A¤]¥i¥H§âplamtop¦w¸Ë¦b§Aªºx86¹q¸£¤¤¡C§Ú³oùتº´ú¸Õ¡A486¥H¤W³£¨S¦³°ÝÃD¡C

 

¥ý¨Óµ¹¤j®aÁ¿Á¿embedded QT:

 

­º¥ý¡A¦]爲embedded QT¤£¬O«Ø¥ß¦bX11ªº°ò¦¤Wªº¡A©Ò¥H¹B¦æ®É¹ïRAMªº­n¨D«Ü§C¡C²³æªº³]¸m¡A¯à¦b800 Kb¤¤¹B¦æ¡]Intel x86¡^¡CEmbedded QT¥»¨­

¼g¥X¨Óªºµ{¦¡¤]«D±`ªº¤p¡C³q±`³£¦b´X¤QKb¥ª¥k¡C¬Û«HQTªº¬üÆ[©Ê¡A¤j®a¦bª±KDEªº®É­Ô´N¤w¸g³£¨£¹L¤F§a, Embedded QT·íµM¤]«Ü¦ÛµMªºÄ~©Ó¤FQTªº¥~Æ[¡C·íµM¡A³Ì­«­nªº´N¬OEmbedded QT¬O¥i¥H¸ó¥­»Oªº¡C³o¤]´N¬O»¡¡A¯à¶]Linuxªº¦a¤è¡A´N¥i¥H¶]Embedded QT¤F¡CARM, I386, Motorola 68000, MIPS, PowerPCµ¥µ¥ªºµwÅé¤W¡A³£¥i¥H¹B¦æEmbedded QT.

 

PlamTop©O¡A´N¬O¥ÎQT-embedded¼gªº¤@­Óµ¹embedded system¥Îªº¨t²Î¡C·íµM¡A¥Ø«e¥D­n¬O¥Î¦biPAQ¤W¡C¦Ó¹ê»Ú¤W¡A¥u­n¯à¶]linuxªºPDA,¦³cross compiler°ò¥»¤W³£¥i¥H¶]ªº°Õ¡C§Ú¦b§Úªº¹q¸£¤W¤]ª½±µ¯à¶]¡]i386¡^ªº¨t²Î¡C

PlamTop³Ì¤jªº¯S¦â´N¬O¹Ï§Î«D±`ªºº}«G¡A¦P®ÉÁÙ¦³­Ó§Ú«Ü³ßÅwªºµ{¦¡¡A¤@­ÓShell¡C¦b´N¬O¹CÀ¸¤@¤j°ï¡CPDA¥D­nªºªF¦è³oùس£¦³°Õ¡C¦Ó¥ÎQT/X11¼gªºµ{¦¡¡Aµy·L°µ§@­×§ï¡A´N¥i¥H¦b³oùض]¤F¡C

 

§Ú­Ì¥i¥H¦bTrolltech¤U¸ü§K¶OªºQT Embeddedª©¥». ¥Ø«eªº³Ì·sí©wª©¥»¬O 3.0.0.¦]爲³oùاڭ̭n¥ÎPlamTop³o­Óµ{¦¡¨Ó°µ´ú¸Õ¡A¦ÓPlamTopªº³Ì·sµ{¦¡1.4.0¦ü¥G¸òQT-3.0.0¤§¶¡¦³ÂI°ÝÃD¡C¡]¦Ü¤Ö§Úªº¹q¸£ùئ³¨â­Ófunction¦³°ÝÃD¡^©Ò¥H§Ú¤U¸üªº¬O¤@­Ó¤ñ¸ûªºª©¥»qt-embedded-2.3.1¡C¤U¸ü¦^¨Ó¥H«á¡C

¦A¨ìPlamTop ¤¤¤U¸ü³Ì·sªºqpeª©¥»¡C¥Ø«eªº³Ì·sª©Ã­©wª©¬Oqpe-1.4.0.¤U¸ü¦^¨Ó«á¡A­º¥ý«Ø¥ß¤@­Ó¥Ø¿ý¨Ó°µ§Ú­ÌªºEmbedded QT Projectªº®a¥Ø¿ý¡G

¡@

$mkdir EMBEDDED-QT

¡@

µM«á§Ú­è­è¤U¸üªº¨º¨â­Ósource¥þ³¡copy¨ì³o­Ó·sªº¥Ø¿ý¤U¡AµM«á¶i¤J¥Ø¿ý¡A§â¨â­Ósource¸ÑÀ£ÁY¡C

¡@

$cd EMBEDDED-QT

$cp ../*.tar.gz .

$for i in *.tar.gz; do tar vxfz $I; done

¡@

§¹¦¨¤W­±ªº¨BÆJ¥H«á¡A§A´N¥i¥H¬Ý¨ì²{¦b§A³oùؤw¸g¦h¤F¨â­Ó¥Ø¿ý¥X¨Ó¡A¤@­Ó¬Oqt-embedded-free-2.3.1¥t¤@­Ó¬Oqpe-1.4.0§Ú­Ì»Ý­n¥ý§âembedded-qt ½s¿è°_¨Ó¥H«á¡A¤~¯à¥h½s¿èqpe.­º¥ý¤Á´«¨ìembedded-qtªº¥Ø¿ý¤U¡G

¡@

$cd qt-embedded-free-2.3.1

¡@

§Ú­Ì»Ý­nµ¹qt-embedded¤@­Ó¹B¦æÀô¹Ò¤~¥i¥H½s¿è¡C

¦bbash¤U¥Îpwd¨Ó½T©w·í«eªº¥Ø¿ý¡G

¡@

$pwd

/EMBEDDED-QT/qt-embedded-free-2.3.1

¡@

µM«á³]©wQTDIRªº»·´º

¡@

$export QTDIR=/EMBEDDED-QT/qt-embedded-free-2.3.1

$export LD_LIBRARY_PATH=/EMBEDDED-QT/qt-
embedded-free-2.3.1/lib:$LD_LIBRARY_PATH

¡@

¦bembedded qt 2.3.1¤U½s¿èqpe1.4§Ú­ÌÁٻݭn¤@¨Çpatchªº°Ê§@¡C

¡@

$patch ¡Vp0 ¡Vs <../qpe-1.4.0/qt/qte-231 ¡Vfor-qpe140.patch

¡@

³o­Ópatch¬Oqpe¥»¨­´£¨Ñªº¡C¡]¦ý¬O¦b§Úªº¾÷¾¹¤¤µo²{patch ¤¤/src/Makefile.in³o­Ó¤å¥óªºpatch¦³ÂI°ÝÃD¡A»Ý­n¦Û¤v°Ê¤â§ï§ï¡^

µM«á§Ú­Ì»Ý­n§aqpeµ¹qte¼g¦nªºqconfig-qpe.hµ¹¥Lcopy¨ìqte¤¤¥h¡C

¡@

$cp ../qpe-1.4.0/qt/qconfig-qpe.h src/tools

¡@

³o®É­Ô¡A§Ú­Ì¥i¥H¹B¦æ./configure script¤F

¡@

$./configure ¡Vqconfig qpe

¡@

³oùاi¶Dconfigure¥Î§Ú­Ì­è­ècopy¹L¥hªº¨º­Óqconfig-qpe.h³o­Ó¤å¥ó¹B¦æ³]©w¡C³]©wµ²§ô¥H«á¡Aª½±µ¥´

¡@

$make

¡@

´N¥i¥H¤F¡C¦pªG¨S¦³¤°麽°ÝÃD¡Aµ¥make§¹¦¨¡A§A´N¤w¸g§âembedded qt

¦w¸Ë¦¨¥\¤F¡C²{¦b¨Ó¬Ýqpe§a¡CQpe«D±`ªºÂ²³æ¡Aª½±µ¥´¡G

¡@

$./configure

$make

¡@

´N¥i¥H¤F¡A©¯¹Bªº¸Ü¡A¤£¤[§A´Nmake¦¨¥\¤F¡C·íµM¦pªG¥X¤F°ÝÃD¡A°ÝÃD¤j¦h¼Æ³£¬O§A½s¿èqt-embeddedªº®É­Ôªº°ÝÃD¡C­«·s½s¿èqt-embeddedµM«á¦A­«·s½s¿èqpe¸Õ¸Õ¬Ý¡C­n°O±o­«·s½s¿èªº®É­Ô­nmake clean,

./configure, make¾¾¡C¡]§Úªºqte´N·d¤F«Ü¤[¡A§ïªº®É­Ô¡A¥i¥Hª½±µ¥h­×§ï$QTDIR/src/tools/qconfig.h¡A¨º¼Ë

·|²³æ¨Ç¡C¦Ü¤Ö§Ú³o麽»{爲J)

 

¦pªG§A¤@¤Á³£·d©w¡A´N¥ý¥h§â¤U­±ªºªF¦èstrip¤@¤U§a¡C¡]¯à¤p«Ü¦h¾¾¡^

¡@

strip ¡VR .note ¡VR .comment bin/*

strip ¡VR .note ¡VR .comment

$QTDIR/lib/libqte.so*

$QTDIR/lib/libqpe.so*

strip ¡VR .note ¡VR .comment

plugins/*/*

¡@

´N³o麽²³æ¡A¤@¤Á³£·d©wok°Õ¡C

 

¤U­±¨Ó»¡»¡¦p¦ó¦bQT-Plamop¤U­±¼gµ{¦¡¡G

¨ä¹ê¦bQT PlamTop¤U­±¨ÇªF¦è¡A¸ò§A¥­®É¼gQTªºµ{¦¡¬O¤@¼Ëªº¡C©Ò¦³ªºclasses©Mfunction³£¬O¤@¼Ëªº¡C

¦ý¬O¦³´XÂI§A¤@©w­nª`·N: (²¦³ºembedded system¦bµwÅé¤W¸ò§Ú­Ìªº¹q¸£¬O¤£¤@¼Ëªº)

1.   Åã¥Ü°ÝÃD¡Gµ¹PlamTop¼gµ{¦¡¡AÅã¥Üªºwidget¤£¯à¶W¹L240x240.

2.   ³q±`PDA¨S¦³¹q¸£¨º麽°·¥þªºÁä½L¡C©Ò¥H·í§A¼gµ{¦¡ªº®É­Ô¡AºÉ¤O¤Ö¥ÎÁä½L±±¨î¡A¦Ó¦h¥Îmouse.

3.   PDA¤¤ªºmouse¡]stylus¡^¸ò§Ú­Ì¥­®É¹q¸£¤¤¥Îªº¬O¤£¤@¼Ëªº¡C¤]´N¬O»¡¡Astylus¤¤¡A¦pªG¨S¦³mouse button pressedªº±¡ªp¤U¡A¬O¨S¦³mouseMoveEvent()ªº¡C

 

³oùاڭ̥έӳ̲³æªºQTµ{¦¡¨Ó°µ­Ó¥Ü½d¡C³o­Óµ{¦¡¤°麽¤]°µ¡A¥u¬OÅã¥Ü¤@­ÓwindowµM«á¦³¤@­Óquit_button¡C¨ä¹ê¼gªº®É­Ô¡A¸ò§A¦bxwindow¤¤¬O¨S¦³°Ï§Oªº¡C°ß¤@ªº°Ï§O´N¬Owidget¤d¸U¤£¯à¶W¹L240¾¾¡C¤£µM´N¯uªººG¤F¡C

¡@

/* myapp.cpp */

#include <qapplication.h>

#include <qlabel.h>

#include <qpushbutton.h>

int main(int argc, char* argv[])

{

        QApplication embedded(argc, argv);

        QWidget* embedded_window=new QWidget();

        embedded_window->setGeometry(0,0,240,120);

        QLabel* E_label=new QLabel("Embedded QT Testing Program", embedded_window);

        E_label->setGeometry(35,10,170,30);

        QPushButton* E_quit_button=new QPushButton("Quit", embedded_window);

        E_quit_button->setGeometry(90,60,60,30);

        QObject::connect(E_quit_button, SIGNAL(clicked()), &embedded, SLOT(quit()));

        embedded.setMainWidget(embedded_window);

        embedded_window->show();

        return embedded.exec();

}

¡@

µ{¦¡¥»¨­«Ü²³æ¡CEmbedded_window¥u°µ¨ì240x120¡A©ñ¦b0,0ªº¦ì¸m¡C­pºâ¤@¤U¡A240 ¡V 170 =70µM«á°£¥H2=35¡A´N§âembedded_windowªº¦ì¸m©w¤U¨Ó¤F¡C¦P²zºâ±oE_quit_buttonªº¦ì¸m¡C

µM«ásignalµ¹clicked¡ASLOT´Nª½±µquit¥Xmain application¡C¤]´N¬O»¡ª½±µÃö±¼´N¦n¡C²{¦b§Ú­Ì§â³o­Ó¤pµ{¦¡¥[¨ìPlamTop¤¤¥h§a¡C

­º¥ý¦b§Aªº$QPEDIR¤U­±°µ¤@­Ó·sªº¥Ø¿ý¡A¥Ø¿ý¦WºÙÀH«K¡C

¡@

$cd $QTDIR

$mkdir myapp

$cd myapp

¡@

µM«á´N¥i¥H§â¤W­±ªº¨º­Ómyapp.cpp¼g¦b³o­Ó¥Ø¿ý¤U¡C¦P®É§A»Ý­n¼g¤@­Ótmakeªºproject ¤å¥ó¡Gmyapp.pro¡C³o­Ó¤å¥ó´N·Ó¨ä¥Lªº¥Ø¿ý¤ºªºpro¨Ó¼g´N¦n¡C¦]爲§Ú­Ìªºµ{¦¡«Ü²³æ¡C¥þ³¡³£¼g¦b¤@­Ó¤å¥ó¤U¡C©Ò¥H§Ú­Ìªº.pro¤å¥ó¬Ý°_¨ÓÀ³¸Ó¬O³o¼Ëªº¡G

¡@

EMPLATE   = app

CONFIG       = qt warn_on release

DESTDIR          = ../bin

HEADERS         =

SOURCES         = myapp.cpp

INCLUDEPATH     += ../library

DEPENDPATH += ../library

LIBS            += -lqpe

INTERFACES   =

TARGET      = myapp

¡@

µM«á§â§Ú­Ì¼gªºªF¦è¥[¨ì$QPEDIR¤UªºMakefile¤¤¥h¡G

´N¥[¦b APPS=$(LOCALAPPS)¨º¤@¦æ¤¤¡C¡]©ñ¨ì³Ì«á´N¦n¡^

³Ì«á§Ú­Ì¦b±q·s¶]¤@¹Mconfigure ªºscript. ³o¼Ëconfigure´N·|¦Û°ÊÀ°§Ú­Ì§âMakefile.in©MMakefile°µ¦n¡C²{¦b´N¥i¥H½s¿è§Aªºµ{¦¡°Õ¡G

¡@

$cd $QPEDIR/myapp

$make

¡@

³Ì«á­n°µªº´N¬O¦b$QPEDIR¤Uªº

apps/applications¤¤¼g¤J§Ú­Ìªºdesktop ¤å¥ó¡C

¡@

$cd $QPEDIR/apps/applications

$vi myapp.desktop

¡@

desktop¤å¥óªº¼gªk«Ü²³æ¡A¸òKDEùØ­±ªºdesktop¬O¤@¼Ëªº¡A©Ò¥H§Ú­Ì¥u­n¼g¤J¡G

¡@

[Desktop Entry]

Comment=My Embedded Tester

Name=MyApp

Icon=myapp_embedded

Type=Application

Exec=myapp

¡@

´N¥i¥H¤F¡C·íµM¡A§Ú­Ì­n§ä­Óiconµ¹myapp¨Ó¥Î¡CÀH«Kµe­Ópngªºicon¹Ï§Î¡]xwindow¤¤¦³­Ó¤£¿ùªºicon editor¡^µM«á©R¦W爲myapp_embedded

´N¦n¡C¡]°O±o­n¥Îpngªº®æ¦¡¨Ó¦s¡^

§â³o­Óicon©ñ¨ì$QPEDIR/pics/myapp¤U­±´N¦n³oùتº´N¬Omyapp_embedded.pngª`·N³oùتº¦W¦r¥²¶·¸ò«e­±§Ú­Ìmyapp.desktop¤¤ªºiconùØ­±ªº¤@¼Ë¡C¤£µM´N§ä¤£¨ìIcon¤F¡C

¨ì³oùØ¡A§A´N¥þ³¡³£§¹¦¨¤FJ¡C

 

·íµM¡A³oùتºµ{¦¡¥u¬O­Ó爲¤F´úÅç¥Îªº¤pµ{¦¡¦Ó¤w¡C¨ä¹ê«Ü¦hªºQTµ{¦¡³£¬O¥i¥Hª½±µµ¹Embedded QT¨Ó¥Îªº¡C¬Æ¦Ü¤@¨ÇKDEªºµ{¦¡¡Aµy·L­×§ï­×§ï¤]³£¥i¥H®³¨Ó¥Î¡C¤j®a¥i¥H¨ìQTªººô¯¸Trolltech¥h¬Ý¬Ý¡C


Author: Goldencat <Ruili@worldnet.att.net>

 Copyright:

This article is Copyright (c) 2001 by Rui Li. All right reserved. Any personal use is encouraged. But please include this Copyright and Author with any copy.

For other uses, Please contact the author.

¡@