LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1737|回复: 3

嵌入式中的QT/Embedded 的应用

[复制链接]
发表于 2005-6-26 17:19:22 | 显示全部楼层 |阅读模式
Embedded QT & QT PalmTop


--------------------------------------------------------------------------------

 










































 

  

QT是什麽相信用過KDE的人一定不會陌生。因爲QT使用簡單(C++的一種延伸)同時又具有跨平臺的特性,加上Embeded QT本身不用到X11的東西就可以做出Windows?恚钥梢栽诤艿偷挠搀w上運行。現在很多人已經把QT用於Embedded 系統上。

  

這裏我們?碛肞lamTop這個程式?碜魇竟牎J紫认茸屛覀兛纯碢lamTop都有些什麽:

  

PlamTop本身已經有很多非常完整的程式了。位址本、電腦、世界表、日程安排、MPEG、圖像、聲音、表格、Browser、文件遊覽、文字編輯、Todo等等。當然也少不了一大堆的遊戲。因爲QT的關係,只要遵循I18N,就可以很輕鬆的做出多語言系統。也就是說PlamTop本身就已經提供了一個很好的中文環境了。對於我們這些需要用到中文的人?碚f,只要再加上個中文輸入程式,就太完美啦。正在有點頭痛給自己寫中文輸入法的時候,又被我發現原?碓缇陀腥艘呀泿臀覀冏龊昧恕V灰螺dQPECIN 就好了。那是SourceFab的一個Project。專門就是在開發PlamTop下的中文輸入法問題。

  

看了這麽多,不知道大家是否動心呢?好吧,現在就?斫探檀蠹胰绾?碜瞿阕约旱腝T embedded system。當然,你也不一定非給要有iPAQ才可以。QT本身是可以跨平臺的,所以你也可以把plamtop安裝在你的x86電腦中。我這裏的測試,486以上都沒有問題。

  

先?斫o大家講講embedded QT:

  

首先,因爲embedded QT不是建立在X11的基礎上的,所以運行時對RAM的要求很低。簡單的設置,能在800 Kb中運行(Intel x86)。Embedded QT本身

寫出?淼某淌揭卜浅5男 Mǔ6荚趲资甂b左右。相信QT的美觀性,大家在玩KDE的時候就已經都見過了吧, Embedded QT當然也很自然的繼承了QT的外觀。當然,最重要的就是Embedded QT是可以跨平臺的。這也就是說,能跑Linux的地方,就可以跑Embedded QT了。ARM, I386, Motorola 68000, MIPS, PowerPC等等的硬體上,都可以運行Embedded QT.

  

PlamTop呢,就是用QT-embedded寫的一個給embedded system用的系統。當然,目前主要是用在iPAQ上。而?際上,只要能跑linux的PDA,有cross compiler基本上都可以跑的啦。我在我的電腦上也直接能跑(i386)的系統。

PlamTop最大的特色就是圖形非常的漂亮,同時還有個我很喜歡的程式,一個Shell。在就是遊戲一大堆。PDA主要的東西這裏都有啦。而用QT/X11寫的程式,稍微做作修改,就可以在這裏跑了。

  

我們可以在Trolltech下載免費的QT Embedded版本. 目前的最新穩定版本是 3.0.0.因爲這裏我們要用PlamTop這個程式?碜鰷y試,而PlamTop的最新程式1.4.0似乎跟QT-3.0.0之間有點問題。(至少我的電腦裏有兩個function有問題)所以我下載的是一個比較舊的版本qt-embedded-2.3.1。下載回?硪葬帷

再到PlamTop 中下載最新的qpe版本。目前的最新版穩定版是qpe-1.4.0.下載回?磲幔紫冉⒁粋目錄?碜鑫覀兊腅mbedded QT Project的家目錄:


 

$mkdir EMBEDDED-QT



 

然後我剛剛下載的那兩個source全部copy到這個新的目錄下,然後進入目錄,把兩個source解壓縮。

 


$cd EMBEDDED-QT

$cp ../*.tar.gz .

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

 


完成上面的步驟以後,你就可以看到現在你這裏已經多了兩個目錄出?恚粋是qt-embedded-free-2.3.1另一個是qpe-1.4.0我們需要先把embedded-qt 編輯起?硪葬幔拍苋ゾ庉媞pe.首先切換到embedded-qt的目錄下:

 


$cd qt-embedded-free-2.3.1


 

我們需要給qt-embedded一個運行環境才可以編輯。

在bash下用pwd?泶_定當前的目錄:


 

$pwd

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


 

然後設定QTDIR的遠景

 


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

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


 

在embedded qt 2.3.1下編輯qpe1.4我們還需要一些patch的動作。

 


$patch –p0 –s <../qpe-1.4.0/qt/qte-231 –for-qpe140.patch

 


這個patch是qpe本身提供的。(但是在我的機器中發現patch 中/src/Makefile.in這個文件的patch有點問題,需要自己動手改改)

然後我們需要吧qpe給qte寫好的qconfig-qpe.h給他copy到qte中去。


 

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

 


這時候,我們可以運行./configure script了

 


$./configure –qconfig qpe

 


這裏告訴configure用我們剛剛copy過去的那個qconfig-qpe.h這個文件運行設定。設定結束以後,直接打

 


$make

 


就可以了。如果沒有什麽問題,等make完成,你就已經把embedded qt




安裝成功了。現在?砜磓pe吧。Qpe非常的簡單,直接打:

 


$./configure

$make

 


就可以了,幸運的話,不久你就make成功了。當然如果出了問題,問題大多數都是你編輯qt-embedded的時候的問題。重新編輯qt-embedded然後再重新編輯qpe試試看。要記得重新編輯的時候要make clean,

./configure, make噢。(我的qte就搞了很久,改的時候,可以直接去修改$QTDIR/src/tools/qconfig.h,那樣

會簡單些。至少我這麽認爲J)

  

如果你一切都搞定,就先去把下面的東西strip一下吧。(能小很多噢)

 


strip –R .note –R .comment bin/*

strip –R .note –R .comment

$QTDIR/lib/libqte.so*

$QTDIR/lib/libqpe.so*

strip –R .note –R .comment

plugins/*/*


 

就這麽簡單,一切都搞定ok啦。

  

下面?碚f說如何在QT-Plamop下面寫程式:

其?在QT PlamTop下面些東西,跟你平時寫QT的程式是一樣的。所有的classes和function都是一樣的。

但是有幾點你一定要注意: (畢竟embedded system在硬體上跟我們的電腦是不一樣的)


1.   顯示問題:給PlamTop寫程式,顯示的widget不能超過240x240.


2.   通常PDA沒有電腦那麽健全的鍵盤。所以當你寫程式的時候,盡力少用鍵盤控制,而多用mouse.


3.   PDA中的mouse(stylus)跟我們平時電腦中用的是不一樣的。也就是說,stylus中,如果沒有mouse button pressed的情況下,是沒有mouseMoveEvent()的。

  

這裏我們用個最簡單的QT程式?碜鰝示範。這個程式什麽也做,只是顯示一個window然後有一個quit_button。其?寫的時候,跟你在xwindow中是沒有區別的。唯一的區別就是widget千萬不能超過240噢。不然就真的慘了。

 


/* 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();

}


 

程式本身很簡單。Embedded_window只做到240x120,放在0,0的位置。計算一下,240 – 170 =70然後除以2=35,就把embedded_window的位置定下?砹恕M硭愕肊_quit_button的位置。

然後signal給clicked,SLOT就直接quit出main application。也就是說直接關掉就好。現在我們把這個小程式加到PlamTop中去吧。

首先在你的$QPEDIR下面做一個新的目錄,目錄名稱隨便。

 


$cd $QTDIR

$mkdir myapp

$cd myapp

 


然後就可以把上面的那個myapp.cpp寫在這個目錄下。同時你需要寫一個tmake的project 文件:myapp.pro。這個文件就照其他的目錄內的pro?韺懢秃谩R驙懳覀兊某淌胶芎唵巍H慷紝懺谝粋文件下。所以我們的.pro文件看起?響撌沁@樣的:

 


EMPLATE   = app

CONFIG       = qt warn_on release

DESTDIR          = ../bin

HEADERS         =

SOURCES         = myapp.cpp

INCLUDEPATH     += ../library

DEPENDPATH += ../library

LIBS            += -lqpe

INTERFACES   =

TARGET      = myapp


 

然後把我們寫的東西加到$QPEDIR下的Makefile中去:

就加在 APPS=$(LOCALAPPS)那一行中。(放到最後就好)

最後我們在?男屡芤槐閏onfigure 的script. 這樣configure就會自動幫我們把Makefile.in和Makefile做好。現在就可以編輯你的程式啦:

 


$cd $QPEDIR/myapp

$make


 

最後要做的就是在$QPEDIR下的

apps/applications中寫入我們的desktop 文件。

 


$cd $QPEDIR/apps/applications

$vi myapp.desktop

 


desktop文件的寫法很簡單,跟KDE裏面的desktop是一樣的,所以我們只要寫入:

 


[Desktop Entry]

Comment=My Embedded Tester

Name=MyApp

Icon=myapp_embedded

Type=Application

Exec=myapp

 


就可以了。當然,我們要找個icon給myapp?碛谩kS便畫個png的icon圖形(xwindow中有個不錯的icon editor)然後命名爲myapp_embedded

就好。(記得要用png的格式?泶妫

把這個icon放到$QPEDIR/pics/myapp下面就好這裏的就是myapp_embedded.png注意這裏的名字必須跟前面我們myapp.desktop中的icon裏面的一樣。不然就找不到Icon了。

到這裏,你就全部都完成了J。

  

當然,這裏的程式只是個爲了測驗用的小程式而已。其?很多的QT程式都是可以直接給Embedded QT?碛玫摹I踔烈恍㎏DE的程式,稍微修改修改也都可以拿?碛谩4蠹铱梢缘絈T的網站Trolltech去看看。



--------------------------------------------------------------------------------

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.

 

这里介绍的用QT/Embedded-2.3.3 作为提供的底层的函数开发的Embedded系统PlamTop(基于何种平台没提),作者将其移植到i386平台上,提供的API界面都是基于PDA的240*240的分辨率(在程式开发过程中就限制了大小 )。基于QT/Embedded开发应用可以直接移植到PDA中(不需要X SERVER)他与X SERVER是本质不同的,在PDA中不像PC上的Linux结构:Hnadware/OS kernel/X server/Application, 而直接就是Handware/OS kernel/QT Embedded Application的结构。这是由于基于QT/Embedded开发的应用直接通过内核中framebuffer驱动机制访问硬件。在其上开发的PDA应用消耗的资源(如RAM,ROM)也很有限
本身的大小和所需的动态库也很小,所以当今大部分的PDA的GUI系统直接采用的QT/Embedded
 楼主| 发表于 2005-6-26 17:22:13 | 显示全部楼层
有些相关的图片如何放在上面去?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-26 17:32:07 | 显示全部楼层
还是直接到网上去看吧:
http://www.study-area.org/tips/qt/qt.htm
回复 支持 反对

使用道具 举报

发表于 2005-6-26 17:45:43 | 显示全部楼层
好人,好帖
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表