Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530521
  • 博文数量: 237
  • 博客积分: 2175
  • 博客等级: 大尉
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-05 22:02
个人简介

目前在一家公司担任软件总监,主要涉及智能手机,笔记本电脑的开发

文章分类

全部博文(237)

文章存档

2024年(18)

2023年(68)

2022年(13)

2021年(7)

2020年(11)

2019年(3)

2018年(10)

2017年(8)

2012年(7)

2011年(4)

2010年(32)

2009年(41)

2008年(6)

2007年(9)

分类: LINUX

2009-10-26 15:58:15

以前因为qtopia以及qt embedded (qtopia core)都是商业的,所以大家做项目都会选择qtopia,毕竟qtopia做了一些工作。但{BANNED}{BANNED}{BANNED}{BANNED}{BANNED}{BANNED}{BANNED}最佳佳佳佳佳佳佳近qt framework (有embedded版本)是LGPL后,我们就得考虑一下在项目中可不可以不用qtopia而用qt embedded了?
 那么qtopia到底为我们做了些什么呢?这些东西在你的项目中用了吗?
 qtopia 是以qt embedded 为基础类库的。其层次架构为:

      qtopia Application
  ===========================
      Qtopia platform
  ------------------------
    Qtopia core (qt embeded)
 其中Jave程序在qt embedded 上面,而其他的程序可以基于qtopia platform ,也可以基于qt embedded .
 以Qt extended 4.4.2为例。在qtopiacore 目录下,包括了dbus , qt3 支持,ttif , jpeg,png,gif,svg等图像格式的支持, zlib ,xml ,sql (sqlite),freetype的支持,以及webkit的支持都在qtopia core里。并支持key, mouse 驱动的plugins .

Qtopia platform提供了:
1) Quick Laucher
  代码在src/tools/quicklaucher下面。
  以前qtopia应用程序启动较慢的原因主要有装载和连接动态库的时间,而Quick Laucher 通过将应用程序作为一个共享库运行的方法来减少启动时间。create一个stub(桩)应用程序laucher,它连接大部分的通用库等.
 在server启动的时候,laucher也启动了,然后收到一个请求 (通过QCopChannel),要启动App1 , 它马上去加载App1 .so , 然后修改应用程序名字laucher为 App1 。
  对于应用程序的改动主要有2个macro :
  QTOPIA_MAIN
  QTOPIA_ADD_APPLICATION
 在.pro文件中
 DEFINES += QTOPIA_APP_INTERFACE (此时应用程序做为一个插件了)
 
 插件放在 /QTOPIADIR/plugins/application目录下。

2) plugin (输入法 etc )
   在src/plugins/下面,qtopia实现了很多插件,比如输入法,网络 (LAN等),不过在qt里面也有输入法插件。
   比如输入法插件的一种,Creat an InputMethodInterface A ,另外一个类B (QWidget), class B 实现input method 界面,以及keyPress singal的发出, B 作为A的成员 。
  然后在.pro文件中加上
  CONFIG += qtopiaplugin
 这样将生成.so (.dll in windows os) ,放在/opt/qtopia/plugins/inputmethods/下面。

3) Server (如key click做为一个server,按键的时候发声,AlarmServer)
   Server可以看成后台的一些tasks ,他们一直在运行

4) service
   一个应用程序 提供某种服务A , 然后别的应用程序可以申请服务A (也是通过QcopChannel机制)

可以这样理解 :

  server 提供 service , 一个server可能提供多个service

 比如 qpe server , 提高alarm server 等等....

5)QPEApplication 替代 QApplication
   这样一个标准的Qt Application就变成了Qtopia Application .
  Qtopia Application 自动遵守一些规则:风格变化....

Qtopia {green}phone 提供了:(有点像wince/windows mobile的关系)
1) games (里面有snake , fifteen ,minesweep等小游戏),
2)  applications (里面有addressbook,蓝牙,clock ,calculator,camera,Calendar,媒体播放器,系统信息,图像编辑等)
3)library :里面有手写库,PIM等 ,还有手机库 (这些都不在open source的包里),手机库包括dialer , PhoneBook , PhoneServer , AT handler, Call List 等一系列的东西。
4) setting

5) desktop
   这个包括PC端的destop工具 同步设备的PIM信息

6) qtopia 服务器
   相当于 KDE系统的桌面


在Qtopia中,我们看其中的说明文档,以Qtopia开头的类如
QtopiaIpcEnvelope,QtopiaService,QtopiaHttp等都属于qtopia platform中的,而另外一些类QphoneNumber等属于Qtopia {green}phone中的类


对于非电话类型的嵌入式产品,不会用到QphoneNumber等类,但可能会用到QtopiaIpcEnvelop(QCOP的封装),也许会用到 laucher等。 所以假如想直接用Qt embedded 做产品,进程间的通讯,服务,以及laucher怎么去处理 是需要考虑的问题。
我的一个项目中用的是qtopia 4.2 ,主要用到了:
1 qtopia封装的qtopiaIpcEvelope,信道是QPE/SYSTEM
2 qtopia的 key plug in , LAN/wlan plugin
3 alarm service
4 media service (应用程序发消息,media service 来控制mplayer)

如果用qt ,则
1 :用qcop, 然后实现一个服务器来代替qpe,实现调节音量等,
2 :qt 里也有key plugin , 需要实现LAN,wlan plugin ,他主要是管理网络的状态,配置文件,qtopia自己实现的一套配置文件机制,可以用标准的网络配置文件,工具来实现。
3 :可以用cron来实现alarm
4 : 在qt extended 4.4 以后,实现了phonon,做为多媒体架构,我们可以用phonon+mplayer
    这样架构成为:
               Qt 多媒体应用程序
      ======================
             Qt phonon 库
       ------------
           phonon后端插件 (phonon-mplayer ,phonon-xine,phonon-gstreamer,etc)
      ==================================================================
         多媒体播放后端 (gstreamer,xine,mplayer)

 对于 qt 多媒体应用程序,可以参见 qt embedded 4.5 /examples/phonon/musicplayer
 对于phonon后端插件,phonon-mplyaer ,参见。






阅读(1487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~