在Linux中移植QT QTOPIA

移动开发
本文介绍一下关于QT QTOPIA在linux上的移植,Qtopia 是Trolltech 公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台, Qtopia包含完整的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。

Qtopia 是Trolltech 公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台, Qtopia包含完整的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。

QT是目前在linux上使用较广的一个图形系统。用户经常配合KDE桌面环境来使用。需要注意的是我们看到的并操作的是KDE,而不是QTQT只是一套库函数(类库),KDE才是可执行程序.同时KDE为了其他程序方便的对其操作,也提供一套库函数(类库)。

在PC机上的QT是基于X11图形系统的,在嵌入设备中往往不需要这么累赘,只需使用QTE(QT Embedded)即可包括PC平台中X11和QT库的功能。

另一方面,嵌入设备受许多条件的限制,桌面系统也不能直接使用PC机上已有的系统。QTOPIA就是相当于KDE的桌面系统.根据具体嵌入设备的需要可以配置成phone和pocket pc两种。

1、准备工作

(1) 目标

首先要明确将要干的是什么,将怎么做。

我们的目标很明确??就是在自己的开发板上使用基于QTE的桌面系统QTOPIA。

我们的工作往往是先在PC完成以后移植到ARM平台上;先编译好QTE的库,再编译QTOPIA。因为这个系统和具体的设备有关(例如:触摸屏、时钟、电源管理设备等),所以***还需要做设备接口的移植工作。
   
(2)软件包

系统平台:RedHat Array(完全安装)

  1. qt-embedded-2.3.7.tar.gz (qte的库)  
  2. qt-x11-2.3.2.tar.gz (为了生成相应的qtdesigner和qvfb)  
  3. qtopia-free-1.7.0.tar.gz (qte的桌面环境程序)  
  4. tmake-1.11.tar.gz (编译时会用到)  
  5. e2fsprogs-1.35.tar.gz (只使用其中的uuid的库) 

当下载完这些包以后我们先建立一个工作环境。假设所有软件包都下载在用户目录下,通常都是/root。

(3)环境的建立

  1. # cd ~  
  2. # mkdir x86-qtopia  
  3. # tar zxvf qt-x11-2.3.2.tar.gz  
  4. # mv qt-2.3.2 qt-x11  
  5. # cd x86-qtopia  
  6. # tar zxvf ../tmake-1.11.tar.gz  
  7. # tar zxvf ../qt-embedded-2.3.7.tar.gz  
  8. # tar zxvf ../qtopia-free-1.7.0.tar.gz  
  9. # tar zxvf ../e2fsprogs-1.35.tar.gz  
  10. # mv tmake-1.11 tmake  
  11. # mv qt-2.3.7/ qt  
  12. # mv qtopia-free-1.7.0 qtopia  
  13. # mv e2fsprogs-1.35 e2fsprogs  
  14. # cp x86-qtopia arm-qtopia -rf 

记住,用户目录下的x86-qtopia目录是PC机上编译的工作环境,arm-qtopia是arm平台的交叉编译工作环境,qt-x11是两者公用的。

接下来还必须编译qt-x11,主要是为了编译生成其中的qtdesigner和qvfb。qvfb程序在系统中并未安装,需要我们自己编译。qtdesigner是和qt库的版本是相关的,当我们使用PC机上和QTE版本不符的qtdesigner时,可能在PC机上的qt-x11能使用的控件在QTE上并未实现,导致应用程序编译不成功。所以,我们使用2.3版本的QTE时,必须使用相同版本的qt-x11编译生成的qtdesigner和qvfb。

  1. # cd ~/qt-x11  
  2. # export QTDIR=$PWD  
  3. # echo yes | ./configure -static -no-xft -no-opengl -no-sm  
  4. # make -C src/moc  
  5. # cp src/moc/moc bin  
  6. # make -C src  
  7. # make -C tools/designer  
  8. # make -C tools/qvfb  
  9. # cp tools/qvfb/qvfb bin  
  10. # strip bin/uic bin/moc bin/designer bin/qvfb  
  11. # cp qt-x11/bin/* qt/bin -f  
  12. # cp qt-x11/bin/* qt/bin -f 

2、PC平台编译

编译之前做一下准备工作:打开一个控制台之后设置环境变量。

  1. # cd ~/x86-qtopia  
  2. # export QTDIR=$PWD/qt  
  3. # export QPEDIR=$PWD/qtopia  
  4. # export TMAKEDIR=$PWD/tmake  
  5. # export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++  
  6. # export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH 

(1)编译QTE

  1. # cd $QTDIR  
  2. # cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/ -f  
  3. # (echo yes ; echo no) | ./configure -platform linux-generic-g++  -qconfig qpe -depths 16,24,32  
  4. # make -C src clean  
  5. # make -C src 

看一下QTDIR目录下是否已经有了qt的库了?

#p#

(2)编译QTOPIA

  1. # cd $QPEDIR/src  
  2. # ./configure  
  3. # make clean  
  4. # make 

(3)测试QTOPIA

激动的时刻来了,如果这个步骤成功将意味着可以做应用开发了。

  1. # cd ~/x86-qtopia  
  2. # mkdir dist  
  3. # cd dist  
  4. # cp -af ../qt/lib/ .  
  5. # cp -af ../qtopia/apps .  
  6. # cp -af ../qtopia/bin .  
  7. # cp -af ../qtopia/plugins .  
  8. # cp -af ../qtopia/i18n .  
  9. # cp -af ../qtopia/pics . 

因为Security.png有点错误,所以必须进行一下操作:

  1. # cd pics  
  2. # pngtopnm Security.png>a.pnm  
  3. # pnmtopng a.pnm>Security.png 

因为qpe运行的时候,当前目录必须是$QTDIR/bin,所以不能在$QTDIR目录下执行bin/qpe来运行。

  1. # export QTDIR=~/x86-qtopia/qt  
  2. # cd $QTDIR/bin  
  3. # ./qvfb &  
  4. # ./qpe & 

看到qpe在qvfb中的界面了吗?我看到了~!

3、 目标平台交叉编译

与PC机上的编译一样,打开一个控制台之后需要设置环境变量。

  1. # cd ~/arm-qtopia  
  2. # export QTDIR=$PWD/qt  
  3. # export QPEDIR=$PWD/qtopia  
  4. # export TMAKEDIR=$PWD/tmake  
  5. # export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++  
  6. # export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH 

(1)交叉编译QT

(2) 交叉编译QTOPIA

4、移植QT中的相关设备接口

(1) 鼠标

(2)触摸屏

5、移植QTOPIA中的相关设备接口

(1)电源管理设备

6、编写QT程序并移植

7、编写QTOPIA程序并移植

  1. X. tips 

1、移植的时候编译器的版本很重要.qte-2.3.7在redhatArray的3.2编译器下工作很正常,但在Fedora4的gcc-3.4.2编译器下编译却不成功.根据测试,PC平台上使用gcc-3.2可以顺利编译,arm平台上使用gcc-2.Array5.2可以顺利通过(gnuarm的编译器好像不行,用华恒光盘中的armv4l-unkown-linux-gcc的可以编译通过)
2、编译过程中会提示缺少uuid的头文件和库,下载e2fsprogs-libs-1.38.tar.gz,里面有uuid的相关代码.
3、编译的时候需要指定编译器,在qt的configs目录下有许多文件,修改linux-arm-g++-*这些文件中的相关定义.例如:默认使用arm-linux-gcc编译器,而我使用的是GNUARM的arm-elf-gcc编译器,替换文件中所有arm-linux-前缀为arm-elf-即可.

小结:前段时间,诺基亚宣布收购从事桌面和移动设备应用架构开发的公司Trolltech。Trolltech以QT架构而闻名,这种架构是开源KDE的核心。恩,还是比较重要一点!希望本文对你有所帮助!

【编辑推荐】

浅谈Qt中多线程编程

Qt Symbian SDK 安装

在Qt中如何写控制台程序

Qt 平台中使GUI保持响应流畅

基于Qt Web浏览器设计与实现

浅谈自动化测试工具 QTP脚本的重用

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-20 09:26:38

Linux qtopia QT

2011-06-20 09:58:17

Qt Qtopia 移植

2011-06-20 09:06:05

Qt Qtopia

2011-06-29 09:20:41

Qt Embedded Qtopia

2011-06-29 10:46:01

Qt Eembedded Linux

2011-06-13 11:24:55

QT MPlayer 移植

2011-06-23 18:16:59

Qt Qtopia

2011-06-28 13:02:06

Qt Qt 4.7.3 ARM

2011-06-13 11:07:22

QT 移植

2011-06-14 09:21:55

Linux Qt 环境变量

2011-07-05 16:31:17

Qtopia 交叉编译

2011-06-15 18:38:17

Linux Qt Symbian

2011-07-05 11:10:23

Linux Qt 移植

2011-07-05 10:55:14

Linux Qt 移植

2011-06-15 18:20:20

Qt 移植 Android

2011-06-13 17:46:07

Qt 串口通信

2011-07-04 10:56:10

Qt 移植 编译

2011-06-20 10:27:24

Mini2440 Qtopia Qt

2011-07-02 13:42:24

Qt 移植

2011-07-02 13:24:39

QT Linux
点赞
收藏

51CTO技术栈公众号