Month: January 2010

3个半分钟3个半小时

Posted by – January 31, 2010

3个半分钟3个半小时

洪昭光教授 (2002-08-31)

科学家经常强调一句话:老年人要注意三个半分钟,三个半小时。

三个半分钟是一句话,不花一分钱,可以少死多少人啊!很多人白天好好的,白天没事,说昨天死了。嗯,昨天我还看见他,怎么就死了呢?他夜里起床上厕所太快了,突然一起床,唉呦,脑缺血,体位性低血压,脑缺血旋转摔倒,有的颅骨摔碎了,有的心脏骤停。

那么科学家怎么提出这三个半分钟呢?因为我们在遥控心电图监测时,发现好多人白天心电图正常,突然晚上老是心肌缺血,期前收缩。是什么道理呢?

因为,他突然起床,一下子血压低了,脑缺血心脏停了。三个半分钟是:醒过来不要马上起床,在床上躺半分钟;坐起来又坐半分钟;两条腿下垂在床沿又等半分钟。

经过这三个半分钟,不花一分钱,脑缺血没了,心脏不仅很安全,减少了很多不必要的猝死,不必要的心肌梗塞,不必要的脑中风。

有一次我们讲完课,有位老干部大哭,哭得非常伤心说:“我就是两年前夜里上厕所,上得快了一点,猛了一点,头晕,结果第二天半身不遂,整整在床上躺了8个月,长起褥疮来,儿子都不孝顺了,如果我早听这节课,就不至于半身不遂了。早知道‘三个半分钟’我哪至于受8个月的罪。”

“三个半小时”,一是早上起来运动半小时:打打太极拳,跑跑步,但不能少于三公里,或进行其他运动。

要因人而异,运动适量;二是午睡半小时。这是人生物钟需要,中午睡上半小时,下午上班,精力特别充沛,老年人更是需要补充睡眠,因为晚上睡得早、起得早,中午非常需要休息;

三是晚上6 至7时漫步行走半小时。老年人晚上睡得香,可减少心肌梗塞、高血压的发病率。

难受3角钱的药花去90万医药费

我们医院有个同志高血压12年,他的血压很奇怪,200不难受,可一吃降压药他倒很难受了,他老不吃药,打听了两个医生,一个医生说必须吃药;一个医生说,你既然吃药难受,就别吃了,他就不吃了。

12年下来,动脉硬化、尿毒症,这可不得了,要透析,一个礼拜三次,一年9万元,结果透了10年,花了90万元。

他爱人为他请了10 年假,他整天坐在轮椅上,活不活死不死,浮肿贫血,最后也死了。

其实呢,一天一片药,3毛钱就管住了,他没有按照科学的办法,结果就花了90万。其实预防很简单,减少很多人得病,减少很多人出意外,从这方面来讲,高科技远远不如预防好。

十六字助你延年益寿:合理膳食 适量运动 戒烟限酒 心理平衡

那么这里要谈到一个重要的东西,就是观念问题。同志们观念必须转变。什么叫观念转变呢?我们要充分认识到现在这么多的各种各样的病,归根到底就是生活方式不文明造成的,如果我们坚持文明健康的生活方式,就可以不得病。   一共就四句话,十六个字:合理膳食,适量运动,戒烟限酒,心理平衡。这四句话,十六个字,能使高血压减少55%,脑卒中、冠心病减少75%,糖尿病减少50%,肿瘤减少1/3,平均寿命延长10年以上,而且不花什么钱,因此健康方式很简单,效果非常大。

《新明日报》

打,打个大西瓜: 国内原创动画CG

Posted by – January 10, 2010

国人动画经典:
www.jokelate.cn
http://www.tudou.com/programs/view/IYke1mDJx4M/

Download address:  ftp://1:1@222.186.33.204/seethrough.avi

游戏:Burst(刺激枪战类)

Posted by – January 6, 2010

游戏:Burst(刺激枪战类)

在线游戏-burst

作为办公室一族的你,一整天对着办公文件和电脑是不是很枯燥?如果是的话,就在老板不在的时候偷着玩会小游戏吧,不但放松精 神,而且有在线分数排名哦…

这个枪战小游戏,玩起来很过瘾,也很容易上手,困了的时候玩会这个还是可以稍微醒醒盹儿的,呵呵…

游 戏操作方法:

W-跳  A-左  S-蹲  D– 右  鼠标左键-设计  空格键-手雷

开始游戏,杀光所有敌人吧:

怎么样,如果你觉得这个游戏还不错,那就把网址发给你的朋友们吧,跟他们比比谁的分数更高!

固定链接: http://jinlab.com/blog/?p=172

通关了,哈哈. ( All Zones Finished!)

QT手册& 汉化Chinesize

Posted by – January 5, 2010

QT手册& 汉化Chinesize:
http://blog.chinaunix.net/u/26313/showart_213711.html

嵌入式工具Qt的安装与使用
——————————————————————————–

摘要
Qt是Trolltech公司的一个产品。Trolltech是挪威的一家软件公司,主要开发两种产品:一种是跨平台应用程序界面框架;另外一种就是提供给做嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备上。Qt和 Qtopia分别是其中具有代表性的两个。

By lanf, 出处:http://tech.ccidnet.com/pub/article/c310_a71173_p1.html

作者:胡利民 本文选自:开放系统世界

Qt是Trolltech公司的一个产品。Trolltech是挪威的一家软件公司,主要开发两种产品:一种是跨平台应用程序界面框架;另外一种就是提供给做嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备上。Qt和Qtopia分别是其中具有代表性的两个。

Qt是一个多平台的C++图形用户界面应用程序框架,它能给用户提供精美的图形用户界面所需要的所有元素,而且它是基于一种面向对象的思想,所以用户对其对象的扩展是相当容易的,并且它还支持真正的组件编程。

Qt是Linux桌面环境KDE的基础。笔者认为,可以说Qt与Windows下的Mfc的实质是一样的,所以Qt最大的优点在于其跨平台性,可以支持现有的多种操作系统平台,主要有:

◆ MS/Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP;

◆ Unix/X11 Linux、Sun Solaris、HP-UX、Compaq True64Unix、IBM AIX、SGI IRIX和很多其它X11平台;

◆ Macintoshi Mac OSX;

◆ Embedded—带FramBuffer的Linux平台。

下面简单介绍一下Qt/Embedded和Qtopia在Linux上的安装和使用,还有在开发过程中可能碰到的一些问题。

Qt 和Qtopia的安装

如果需要安装一个带FramBuffer的Qtopia平台,需要有以下软件(所列举软件以笔者使用的为例):

◆ Qtopia 1.6.0;

◆ Tmake 1.11;

◆ Qt/Embedded 2.3.4(Qtopia 1.6.0是基于该开发平台上开发的);

◆ Qt/Embedded 2.3.2 for X11;

◆ Qt 3.1.2 for X11。

在Trolltech公司的网站上可以下载该公司所提供的Qt/Embedded的免费版本。

Qtopia平台安装分为以下几个步骤:

1. 解包Qtopia

在Linux命令模式下运行以下命令:

tar xfz qtopia-source-1.6.0 (解包)
cd qtopia-source-1.6.0
export QPEDIR=$PWD (设置环境变量)
cd..

2. 安装Tmake

在Linux命令模式下运行以下命令:

tar xfz tmake-1.11.tar.gz
export TMAKEDIR=$PWD/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin:$PATH

3. 安装Qt/Embedded2.3.4

在Linux命令模式下运行以下命令:

tar xfz qt-embedded-2.3.4-commercial.tar.gz
cd qt-2.3.4
export QTDIR=$PWD
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
. /configure -qconfig qpe -qvfb -depths 4,8,16,32
make sub-src
cd ..

也可以在configure的参数中添加-system-jpeg和gif,使Qtopia平台能支持jpeg、gif格式的图形。

4. 安装Qt/X11 2.3.2

在Linux命令模式下运行以下命令:

tar xfz qt-x11-2.3.2-commercial.tar.gz
cd qt-2.3.2
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
. /configure -no-opengl
make
make -C tools/qvfb
mv tools/qvfb/qvfb bin
cp bin/uic $QTEDIR/bin
cd ..

根据开发者本身的开发环境,也可以在configure的参数中添加别的参数,比如-no-opengl或-no-xfs,可以键入./configure -help来获得一些帮助信息。

5. 安装Qt/X11 3.1.2

在Linux命令模式下运行以下命令:

tar xfz qt-x11-commercial-3.1.x.tar.gz
cd qt-x11-commercial-3.1.x
export QTDIR=$PWD
export QT3DIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -thread
make
cd ..

6. 安装Qtopia

在Linux命令模式下运行以下命令:

cd qtopia-source-1.6.x
export QTDIR=$QTEDIR
export QPEDIR=$PWD
export PATH=$QPEDIR/bin:$PATH
cd src
./configure
make
cd ../..

7. 安装Qtopia桌面

cd qtopia-source-1.6.x/src
export QTDIR=$QT3DIR
./configure -qtopiadesktop
make
mv qtopiadesktop/bin/qtopiadesktop ../bin
cd ..

Qt和Qt Designer的使用
——————————————————————————–
根据上面的步骤安装完成了Qt/Embedded和Qtopia之后,就可以运行这些程序了。

运行Qt的虚拟仿真窗口:在Linux的图形模式下运行命令qvfb&;Qtopia只是一个用Qt/Embedded开发的程序,运行Qtopia,在图形模式下运行命令:

export QTDIR=$QTEDIR,
qpe &;

这样Qtopia的程序就运行在QVFB上,即Qt的虚拟仿真窗口。

Qt/Embedded是针对嵌入式Linux而开发的一种开发工具,Qt封装了一些常用的类,而且这些类的名字都以Q字开头命名,如QString、QDialog等。这里主要介绍一下如何利用Qt Designer来设计组件,并生成相应的代码。

在Qt中,把组件分为复合体、原始体和配件。而在Qt中,组件是由一些抽象类、复杂的组件类、管理组件几何特性的类等组成。

Qt中有三个主要的基类:QObject、Qapplication和QWidget。

在Qt 中编程,利用Signal和Slot进行对象之间的通信是Qt的主要特征。它与Windows中的消息机制非常类似,但是Signal和Slot机制真正实现了一种消息的封装。当对象的状态改变时,发出Signal,通知所有的Slot接受Signal,尽管它不知道哪些函数是Slot,Slot一开始也不知道哪些Signal可以接收。Signal和Slot之间不是一一对应的关系,一个Signal可以发给多个Slot, Slot也可以接收多个Signal。Slot除了可以接收Signal以外,与其它的成员函数没有区别。这种机制比使用回调函数要灵活,但是会减慢程序的运行速度。不过在现在高速CPU的面前,这种损失是无足轻重的,而且它还能保证程序的简明性和灵活性,非常便利。

在Qt的组件中,不仅定义了常用的成员变量和成员函数,还定义了所有与该组件相关的Signal和Slot。

要将组件组合起来,最简单的方法就是使用Qt Designer。首先要启动Qt Designer,在Linux命令模式下,键入以下命令(假设Qt安装在/usr/local下):

cd qt-2.3.2/bin
./designer

这样就可以启动一个与Windows下的Delphi相类似的界面。

然后新建一个QFrame,将自己需要的组件直接拖拉到这个Frame中,相信很多人都有过这样的经历,此处就不再详细描述了。完成之后存盘时,会将这个新的组件保存为一个扩展名为.ui的文件。假设所存的文件名为test.ui,用vi test.ui来查看这个文件,发现这是一个用xml语言写的一个文本。下面用这个test.ui生成相应的test.h和test.cpp。同样还是在这个目录下,可以看到一个uic的工具,这个是Qt专门用来将ui文件生成.h和.cpp文件的,在终端模式下键入以下命令:

./uic -o test.h test.ui
./uic -o test.h -i test.cpp test.ui

此时就能看到生成了相应test.h和test.cpp,这是一个类。当然这只是一些表面的东西,还需要在这些代码中添加相应的Signal和Slot,完成所需要的操作。值得注意的是,相应版本生成的ui最好用相应版本的uic来生成代码。如果用Qt 3.1.2的Designer生成的ui,用Qt 2.3.2的uic来生成代码,生成的代码都会是一些空函数。

在一般的开发过程中,首先通过这个ui生成的一个类,在Qt中通常叫做 Base,如上面的例子,叫做testBase;然后再新建一个类,来继承这个Base。通常叫做实现类Impl,如testImpl。在这个实现类里面定义所需要的成员函数、Signal和Slot,因为ui可能是经常需要改动的。如果这样做,每次只需要在Designer中修改ui,而不用去理会这些成员函数、Signal和Slot了。

编译一个Qt程序必然需要Makefile,在Qt中提供了一个专门生成Makefile的工具,就是tmake。用tmake需要根据编写的程序写一个.pro文件。.pro文件非常简单,有固定的格式,下面是一个例子:

TEMPLATE = app
CONFIG = qtopia warn_on release
MOC_DIR =tmp
OBJECTS_DIR =tmp
HEADERS =fcrs.h\
structs.h \
globalfunc.h \
globalvars.h \
testimpl.h
SOURCES = main.cpp \
globalfunc.cpp\
globalvars.cpp \
testimpl.cpp
INTERFACES = test.ui \
TARGET = fcrs

生成这个.pro文件之后,在终端中键入下面的命令:

tmake -o Makefile test.pro

就自动生成了一个Makefile,使用这个Makefile编译所编写的程序就可以了。

Qt/Embedded开发环境建立的过程
——————————————————————————–

Qt/Embedded开发环境建立的过程:
(这些软件可以免费从trolltech的WEB或FTP服务器上下载)
◆ tmake 1.11 或更高版本; (生成Qt/Embedded应用工程的Makefile文件)
◆ Qt/Embedded 2.3.7 (Qt/Embedded 安装包)
◆ Qt 2.3.2 for X11; (Qt的X11版的安装包, 它将产生x11开发环境所需要的两个工具)
1、安装tmake
在Linux 命令模式下运行以下命令:
tar xfz tmake-1.11.tar.gz
export TMAKEDIR=$PWD/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin:$PATH
2. 安装Qt/Embedded 2.3.7
在Linux 命令模式下运行以下命令:
tar xfz qt-embedded-2.3.7.tar.gz
cd qt-2.3.7
export QTDIR=$PWD
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -qconfig -qvfb -depths 4,8,16,32
make sub-src
cd ..
上述命令 ./configure -qconfig -qvfb -depths 4,8,16,32 指定Qt 嵌入式开发包生
成虚拟缓冲帧工具qvfb,并支持4,8,16,32 位的显示颜色深度。另外我们也可以在
configure 的参数中添加-system-jpeg 和gif,使Qt/Embedded 平台能支持jpeg、gif
格式的图形。
上述命令 make sub-src 指定按精简方式编译开发包,也就是说有些Qt 类未被编
译。Qt 嵌入式开发包有5 种编译范围的选项,使用这些选项,可控制Qt 生成的库文件的大
小,但是您的应用所使用到的一些Qt 类将可能因此在Qt 的库中找不到链接。编译选项的具
体用法可运行./configure -help 命令查看。
3. 安装Qt/X11 2.3.2
在Linux 命令模式下运行以下命令:
tar xfz qt-x11-2.3.2.tar.gz
cd qt-2.3.2
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-opengl
make
make -C tools/qvfb
mv tools/qvfb/qvfb bin
cp bin/uic $QTEDIR/bin
cd ..
根据开发者本身的开发环境,也可以在configure 的参数中添加别的参数,比如
-no-opengl 或-no-xfs,可以键入./configure -help 来获得一些帮助信息。
如果Qt/Embedded 的应用是在UNIX 平台下开发的话,那么它就可以在开发的机器
上以一个独立的控制台或者虚拟缓冲帧的方式来运行,对于后者来说,其实是有一个X11
的应用程序虚拟了一个缓冲帧。通过指定显示设备的宽度,高度和颜色深度,虚拟出来
的缓冲帧将和物理的显示设备在每个像素上保持一致。这样每次调试应用时开发人员就
不用总是刷新嵌入式设备的FLASH 存储空间,从而加速了应用的编译、链接和运行周期。
运行Qt 的虚拟缓冲帧工具的方法是:在Linux 的图形模式下运行命令:
qvfb (回车)
当Qt 嵌入式的应用程序要把显示结果输出到虚拟缓冲帧时,我们在命令行运行这
个程序时,在程序名后加上-qws 的选项。例如: $> hello -qws

一,QT/E的安装。
——————————————————————————–
在本机中安装了包括QT4.0.1(WINDOWS版本)以及QT/E2。3。7(LINUX版本)。
QT/E我安装在我的虚拟机中。因为QT/E2.3.7的版本问题,其适宜在REDHAT9。0版本(或更低版本)下安装,否则安装不成功。
QT/E安装过程复杂,具体细节可以参考下面这篇文章。《Qt/Embedded开发环境建立的过程》
此文在网上可搜索到。

本机下虚拟机中QT/E安装路径为:/home/wangxl/QTE/qt-2.3.7
QT/X11安装路径为:/home/wangxl/QTE/qt-2.3.2
Tmake安装路径为:/home/wangxl/QTE/Tmake-1.8

QT/E下载地址为:ftp://ftp.rediris.es/mirror/Qt/source/
Tmake下载地址为:ftp://ftp.trolltech.com/freebies/tmake/

二.QT与QT/E以及QT3与QT4之间的区别
——————————————————————————–
相对来说QT与QT/E的语法一样,所不同之处在库类大小或者库类函数大小不同而已。QT/E相对于QT来说,不具有少数类或者少数函数的支持。具体QT/E是否包含某个类或者包含某个类中的函数,我的方法是在QT/E安装目录下的include文件夹中去查找。
QT3和QT4有很多不同点,主要不同也是在于库类以及支持函数有所变化,比如,有些QT3中的函数,在QT4中被其他函数名所代替,因此很多QT4程序在QT3环境下无法执行。QT/E2.3.7与QT3基本相同,除了我前面提到的QT与QT/E的差别。

三.QT/E编译与执行。
——————————————————————————–
1.在QT/E编译与执行前要先设置TMAKE与QT/E LIB环境,具体方法如下:
[root@localhost tmake-1.8]# export TMAKEDIR=$PWD
[root@localhost tmake-1.8]# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
[root@localhost tmake-1.8]# export PATH=$TMAKEDIR/bin:$PATH
[root@localhost qt-2.3.7]# export QTDIR=$PWD
[root@localhost qt-2.3.7]#export QTEDIR=$QTDIR
[root@localhost qt-2.3.7]#export PATH=$QTDIR/bin:$PATH
[root@localhost qt-2.3.7]#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

2.如果你是用DESIGNER工具设计的界面(后面有讲),则要将*.ui文件转换成*.h文件和*.cpp文件。转换方法如下:
uic –o test.h test.ui
uic –o test.cpp –i test.h test.ui

3.编写一个*.pro文件(用来生成Makefile文件用),该文件格式比较固定。
如test.pro文件基本格式如下(以test.cpp ,test.h main.cpp为例子):
EMPLATE = app
CONFIG += qt warn_on release
HEADERS = test.h
SOURCES = test.cpp \
main.cpp
TARGET = hello
DEPENDPATH=/home/wangxl/QTE/qt-2.3.7/include
REQUIRES=

4.生成Makefile文件
方法为:tmake –o Makefile test.pro
5 编译生成可执行文件
make

6 打开QVFB
进入安装QT/X11所在目录, 在BIN目录下执行程序qvfb。
有时候需要修改qvfb执行时的deptb参数才能够执行QT/E程序。可以直接在QVFB打开窗口的Configure彩单项中选择,也可以用如下命令执行QVFB。
./qvfb –width ** -height ** -depth **
7.执行QT/E程序
如 。/TEST
在QVFB程序打开的窗口中将出现TEST程序的显示 。

四.Qt/e与QT/X11
——————————————————————————–
安装QT/E的同时还需要安装QT/X11与Tmake,Tmake 是用来帮助生成Makefile文件的。安装QT/X11主要是向QT/E提供designer工具和qvfb工具的。
Designer可以用来设计图形界面,最后生成.ui文件,可通过UIC命令转换为相应的C++文件。
QVFB模拟帧缓冲,提供QT/E程序的显示平台。

五.QT/E 程序ARM 板上执行
——————————————————————————–
在我虚拟机上可以执行的QT/E程序不能在ARM板上执行,需要对QT/E进行重新编译,并需要设置响对于ARM板系统的编译环境,具体方法可以参考我另外的一文《QT/E开发记录》

六.QT/E支持中文显示问题
——————————————————————————–
QT/E需要字体转换才能显示中文。具体方法可以参考我另外的一文《QT/E开发记录》
但是由于缺少UNICODE的QPF文件的字体,中文字大小不均匀问题尚没解决。

七 QT/E的一些参考资料:
——————————————————————————–
http://www.qtcn.org/bbs/index.php QT中文论坛
http://www.qiliang.net/qt/ (关于QT3的类,以及类函数可以在这寻找)
提供QT3编程最好书籍的电子版本《C++ GUI Programming with QT 3》(本机)
关于QT4可以参考QT ASSISTNAT(本机中),另外QT ASSISTNAT中也可以查找QT3的类及库等。

设置Qtopia的build环境
——————————————————————————–
1、环境变量
在目标系统上build Qtopia必须设定必要的环境变量,如QTDIR, 如果依赖多个版本的Qt,则需要用环境变量指向用到的库配置。
一种方法是将环境变量的设定写入文件,通过运行source命令应用文件的内容。

举例说明:
Linux/bash下建立环境变量设定文件qtopia.sh, 内容如下:
export QPEDIR=/opt/Qtopia
export QTDIR=/opt/Qtopia
export PATH=$QTDIR/bin:$PATH
export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-generic-g++
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

需要时运行 source qtopia.sh即可应用以上环境变量。

另外也可以通过在.bashrc文件中设定别名来应用这些环境变量。 假设环境变量设置文件存放在home目录的bin下, 则可在.bashrc中加入:
alias qtopia=’source ~/bin/qtopia.sh’

2、创建自定义的配置文件

整个Qtopia系统在build过程中需要三个独立的配置系统:
1) Qt/Embedded 配置文件
2) tmake – 用于build Qtopia 1.x和一些第三方软件
3) qmake – 用于build Qtopia 2及以上版本

在build Qtopia以前,先要完成以上三项的配置。

下面是创建一个“myarm”配置的例子:
cp -r $TMAKEDIR/lib/qws/linux-arm-g++ $TMAKEDIR/lib/qws/linux-myarm-g++
cp -r $QTEDIR/configs/linux-arm-g++-shared $QTEDIR/configs/linux-myarm-g++-shared
cp -r $QPEDIR/mkspecs/qws/linux-arm-g++ $QPEDIR/mkspecs/qws/linux-myarm-g++
Qt/Embedded
编辑$QTEDIR/configs/linux-myarm-g++-shared, 修改其中的utilities和flags成适合系统的内容, 如:
可能需要修改SYSCONF_CXX, SYSCONF_CC 和SYSCONF_LINK, 指定正确的编译器. 可能需要增加编译选项-DMYARM,在代码中增加宏#ifdef MYARM(用以增加设备相关的代码)
tmake
编辑$TMAKEDIR/lib/qws/linux-myarm-g++/tmake.conf,修改用到的utilites和flags:
可能需要修改TMAKE_CC, TMAKE_CXX 和TMAKE_LINK
可能需要增加-DMYARM选项
qmake

修改$QPEDIR/mkspecs/qws/linux-myarm-g++/qmake.conf:

QMAKE_CC, QMAKE_CXX 和QMAKE_LINK
-DMYARM
注意:qmake.conf的最后一行必须是:
exists($$(QPEDIR)/src/config.pri):include($$(QPEDIR)/src/config.pri)

可用于目录名的字符

正则表达式字符

Qtopia 1.9.x和Qtopia 2.0.0 – 2.1.0对字符有以下的要求:

Qtopia build系统访问到的任何目录都不能包含正则表达式字符
任何能被QRegExp识别的特殊字符和字符序列都可能引起问题
‘.’字符只匹配自身
不要将正则表达式字符用于目录名,包括(但不仅限于): + . ? * \ () [] ^ $ {}
注:Qtopia 2.1.0和2.1.1及以上版本可以通过应用patch解除以上的限制

空格

Qtopia build系统不支持目录名中包含空格。

必须保证:

build系统访问到的目录不包含空格
访问目录的各层上级目录也不包含空格

Qtopia的依赖和必要条件
——————————————————————————–
简介
为了使Qtopia正确运行, 必须满足以下的必要条件:
安装适当的编译/交叉编译工具
Qt/Embedded-2.3.11
Linux kernel提供共享内存、mmap和socket支持
Linux支持frame buffer
Linux支持OSS声音或支持与OSS兼容的ALSA声音。 进一步的信息参考 The Qtopia A/V & Appearance FAQ
还需要以下的库:

Video4Linux
zlib
libuuid(aka luuid)
libjpeg
xorg 或X11
注:Freetype不是必须的但建议支持 http://freetype.sourceforge.net/index2.html

支持的编译器和交叉编译器
gcc-2.95.2
gcc 3.2.4
gcc-3.3.0, gcc-3.3.3, gcc-3.3.4
gcc-3.4.1

声音

Qtopia需要/dev/dsp可写,并支持以下的ioctl操作:

SNDCTL_DSP_SETFRAGMENT – Qtopia将这个值设置为0x4000c.
SNDCTL_DSP_SETFM – Qtopia设置为AFMT_S16_LE
SNDCTL_DSP_STEREO – Qtopia 设置为 1/true.
SNDCTL_DSP_SPEED – Qtopia设置为44100.
SNDCTL_DSP_GETOSPACE
Qtopia 还需要/dev/dsp可以以阻塞方式和非阻塞方式打开。以上的设定是Qtopia需要的设定,但可以容许少许的偏差,但如果不设定成Qtopia需要的值则不能保证音频能平滑播放。假如您的设备只支持22500的播放速率,则在调用SNDCTL_DSP_SPEED时要报告此速率,以免造成音频质量的缺损。不过,如果系统不支持GETOSPACE,非阻塞写入或 SNDCTL_DSP_SET_FRAGMENT, 几乎可以肯定必然会损失音频质量。

Video4Linux

Camera应用程序需要支持Video4Linux v1的内核, Qtopia没有提供该支持。

请参考官方的 Video for Linux 资源站点,参看API的详细内容。

zlib

zlib可以从 http://www.gzip.org/zlib/ 下载

libuuid(aka luuid)

Qtopia不提供uuid支持。 这个库可以从 http://e2fsprogs.sourceforge.net/ 站点下载

另外, 如果你有SuSE Linux的发行版, e2fsprogs-devel这个包可以提供uuid支持; 在Debian中对应的包是uuid-dev. 这个库应该放在标准路经下/usr/lib/libuuid.so

请用包管理工具来查看该包是否已经安装:

rpm -qa | grep e2fsprogs

如果尚未安装,请从安装盘或镜像站安装这个包。

需要注意的是,如果没有安装e2fsprogs-devel,在链接时会发生下面的错误:

/usr/lib/gcc-lib/i586-suse-Linux/3.3.3/../../../../i586-suse-linux/bin/ld:
cannot find -luuid
如果安装了该库仍遇到上述错误,则检查Qtopia的configure脚本的-L和-R参数, 以确定脚本包含了库的实际路径。 关于交叉编译的信息可参考 System Integrator’s Guide.

libjpeg

Qtopia不提供jpeg库。 Qtopia需要Qt/Embedded配置为支持jpeg。

libjpeg库可从 http://www.ijg.org/ 下载

此外,如果你有SuSE发行版, libjpeg这个包可提供该库。 这个库应该安装在标准路经/usr/lib/libjpeg.so

检查libjpeg包是否已经安装:

rpm -qa | grep libjpeg

如果未安装,请从安装盘或镜像站安装。

关于libjpeg交叉编译的信息, 可参考System Integrator’s Guide.

xorg或X11

开发包括有从以下站点下载:

http://www.xfree86.org/
http://xorg.freedesktop.org
相关讨论

决定开始Qtopia需要的步骤, 参考: Getting started

将Qtopia集成到特定设备上的重点步骤, 参考: System Integrator’s guide

Qtopia的FAQs,参看: Qtopia index page

系统是完全安装RedHat9.0(里面带QT3.1),板子是X-Hyper250B的,Toolchain用的是开发板带的hybus-arm-linux-R1.1

交叉编译所用到的文件:
qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2.tar.gz
qtopia-free-source-2.1.1.tar.gz
tmake-1.13.tar.gz
e2fsprogs-1.35.tar.gz

主机x86的编译步骤:
tar xfz qt-embedded-2.3.10-free.tar.gz(解压后qt-2.3.10改名为qt-2.3.10-host)
export QTEDIR=$PWD/qt-2.3.10-host
tar xfz qt-x11-2.3.2.tar.gz(解压后qt-2.3.2)
export QT2DIR=$PWD/qt-2.3.2
tar xfz qtopia-free-source-2.1.1.tar.gz(解压后qtopia-free-2.1.1改名为qtopia-2.1.1-host)
export QPEDIR=$PWD/qtopia-2.1.1-host
tar xfz tmake-1.13.tar.gz(解压后tmake-1.13)
export TMAKEDIR=$PWD/tmake-1.13
export TMAKEPATH=$PWD/tmake-1.13/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin:$PATH

cd qt-2.3.2
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft
make
make -C tools/qvfb
cd ..

cd qt-2.3.10-host
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
mkdir bin (因为解压后的qt-2.3.10没有bin文件夹)
cp $QT2DIR/bin/uic bin
cp $QT2DIR/tools/qvfb/qvfb bin
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
./configure -qconfig qpe -qvfb -thread -system-jpeg -gif -depths 4,8,16,32
make
cd ..

tar xzf e2fsprogs-1.35.tar.gz
cd e2fsprogs-1.35
./configure -enable-elf-shlibs
make install lib/uuid/
注:这是编译x86的libuuid库
cd ..

cd qtopia-2.1.1-host
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
./configure
make

编译例子:
$qmake -project ==>>我都是这样创建.pro文件的
$tmake -o Makefile hello.pro
$make
$qvfb &
$./hello -qws 或者$qpe
还没怎么仔细研究过。

目标机arm-linux的编译步骤:
tar xfz qt-embedded-2.3.10-free.tar.gz(解压后qt-2.3.10改名为qt-2.3.10-target)
export QTEDIR=$PWD/qt-2.3.10-target
tar xfz qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
tar xfz qtopia-free-source-2.1.1.tar.gz(解压后qtopia-free-2.1.1改名为qtopia-2.1.1-target)
export QPEDIR=$PWD/qtopia-2.1.1-target
tar xfz tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
export TMAKEPATH=$PWD/tmake-1.13/lib/qws/linux-arm-g++
export PATH=$TMAKEDIR/bin:$PATH

cd qt-2.3.2
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft
make
make -C tools/qvfb
cd ..

cd qt-2.3.10-target
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
mkdir bin
cp $QT2DIR/bin/uic bin
cp $QT2DIR/tools/qvfb/qvfb bin
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
./configure -xplatform linux-arm-g++ -qconfig qpe -qvfb -thread -system-jpeg -gif -depths 4,8,16,32
make
cd ..
注:这里需要arm版本的libjpeg.so.62,hybus-arm-linux-R1.1里面包含这个库;如没有可以上网下载。

tar xzf e2fsprogs-1.35.tar.gz
cd e2fsprogs-1.35
./configure -host=arm-linux -with-cc=arm-linux-gcc -with-linker=arm-linux-ld -enable-elf-shlibs -prefix=/usr/local/hybus-arm-linux-R1.1/arm-linux
make install lib/uuid/ ===>>>这步安装到hybus-arm-linux-R1.1/lib上的libuuid.so.1.2版本不对,
要cp lib/libuuid.so.1.2 ../hybus-arm-linux-R1.1/lib
注:这步是交叉编译arm的libuuid库,配置详情见./configure –help
(还要多谢 http://panjet.wleda.com/?p=20 这里面的大哥呀,好不容易才在网上找到的)
cd ..

cd qtopia-2.1.1-host
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
cp src/libraries/qtopia/custom-linux-ipaq-g++.cpp src/libraries/qtopia/custom-linux-arm-g++.cpp
cp src/libraries/qtopia/custom-linux-ipaq-g++.h src/libraries/qtopia/custom-linux-arm-g++.h
./configure -xplatform linux-arm-g++
make
注:这里需要libstdc++.so和libgcc_s.so库

develop环境下qt中文化程序设计
——————————————————————————–
原文出处:Linux公社

kdevelop是一款在linux平台下可以同windows环境下的vc相媲美的集成开发环境,qt则是一款支持包括windows和linux平台
的GUI库,可以说它是linux下的MFC.在显示上,qt使用Unicode作为内部编码,可以支持多种编码.如何使用qt进行国际化编程
在网上可以找到很多资料的,但都是针对较早版本的qt进行介绍的.qt3.0.5中对这些作了些改动,这些方法就相应的要做些改动.
而且在kdevelop中开发qt应用程序,将会事半功倍.我的开发环境为redhat8.0(需安装kde开发工具包).
首先在linux中打开kdevelop集成开发环境,用它的应用程序向导新建一个qt的SDI的应用程序框架.这个同windows下vc很类似.它
将会为你自动生成版本号,作者,e-mail等信息的单文档对话框的应用程序框架.我们首先对它自动生成的程序进行汉化(qt1是
我的项目名称).

1.汉化自动生成的程序

添加翻译文件
在”项目”菜单中选择”添加新的翻译文件”,语言选择”zh_CN.Gb2312″.将会创建一个zh_CN.GB2312字符编码的翻译文件.扩展名
为”.ts”.在qt3.0.5环境下,打开”*.ts”翻译文件的工具是linguist.你可以在”工具”菜单中选择”QT
linguist”来打开,在linguist菜单中选择”file”->”open”打开所要翻译的翻译文件.此时可以在linguist窗口中的source text中
的文本就是你所要翻译的文本,选择所要翻译的文本,在下方有一个类似一页纸一样的地方,在translate下输入翻译后的文本.所示.
翻译完这些文件后,编译运行,在我们的程序里并不能显示中文,还是英文,我们还需要做的就是用lrelease命令将翻译后的文件转换成”.qm”文件才可以使用.在控制台下进入你用kdevelop所生成的应用程序目录.
>lrelease Makefile.am
qt3.0.5用这个两个程序取代了以前版本的findtr和msg2qm命令.在kdevelop集成环境中打开main.cpp主函数,
……
QApplication a(argc, argv);
a.setFont(QFont(“helvetica”, 10));
QTranslator tor( 0 );
tor.load( QString(“qt1.”) + QTextCodec::locale(), “.” );
// tor.load( QString(“qt1.zh_CN.GB2312”), “.” );
a.installTranslator( &tor );
/* uncomment the following line, if you want a Windows 95
look*/
// a.setStyle(WindowsStyle);

Qt1App *qt1=new Qt1App();
//Form1 *qt1=new Form1();
a.setMainWidget(qt1);
……
此处:
tor.load( QString(“qt1.”) + QTextCodec::locale(), “.” );
是根据客户环境的locale来载入当前目录下相应的翻译文件的.redhat中文环境默认的locale为gb18030,
此处要么把翻译文件名由qt1.zh_CN.GB2312.qm改为qt1.zh_CN.GB18030.qm,要么将这句改为
tor.load( QString(“qt1.zh_CN.GB2312”), “.” );
不过为了国际化编程的需要,建议采用第一种方法.更改后编译运行,你会发现你的程序已经是中文界面的了.

2.汉化自己的对话框

大多数情况下我们都需要自己来设计对话框,qt为我们提供了非常好的对话框编辑器QtDesigner,可以很方便的设计我们的对话框,qt
的信号和槽等,关于QtDesigner的使用,限于篇幅,不再赘述.以前面的程序为基础.在kdevelop中选择”文件”->”新建”,选择Qt
Designer文件(*.ui).在文件名一栏中填写”mydialog”,最后点击确定按钮,即会启动QtDesigner,此处只拖了一个Label,写了一
些英文字符.对话框的name属性为Form1.将对话框mydialog.ui保存.
在控制台下进入你用kdevelop所生成的应用程序目录.
>lupdate Makefile.am
同样用”QT
linguist”来翻译qt1.zh_CN.GB2312.tr文件.此时linguist的context中会多出Form1的选项,这里面就是我们新建的对话框要翻译的
选项.依据前面的方法进行汉化.
>lrelease Makefile.am
生成qt1.zh_CN.GB2312.qm文件.
编译将会生成mydialog.cpp mydialog.h mydialog.moc文件.然后将main.cpp中的
Qt1App *qt1=new Qt1App();改为
Form1 *qt1=new Form1();
并将”mydialog.h” #include
进去.依据前面的方法更改tor.load中加载的翻译文件.编译运行,你的对话框也是中文的了.

3.其它的一些说明

由于qt返回的是Unicode编码,譬如你在LineEdit中直接输入中文,返回的就是??,qt中可以直接使用QTextCodec来转换字符串的编码.
QString string;
string=LineEdit1->text(); //取得LineEdit1返回的文字
QTextCodec *codec=QTextCodec::codecForName(“GBK”);
//转换编码
QCString
chinese_string=codec->fromUnicode(string);//用QCString来存储返回的多字节编码
当然,你在头文件中就必需加入
#include <qtextcodec.h>
#include <qstring.h>
#include <qcstring.h>

4.QTextStream对中文的支持

QTextCodec* codec = QTextCodec::codecForName(“GBK”); /* 当前编码为”GBK” */
QTextStream mystream(&file);
mystream.setCodec(codec);

5. QCString&QString
QCString中不以unicode编码
QString以unicode为编码.
qt内部使用unicode为编码,所以如果要在qt的部件如multilineedit中显示中文,则需要将非unicode的字符转换成unicode字符.
QCString locallyEncoded = “中国人不是东亚病夫”; // text to convert
QTextCodec *codec = QTextCodec::codecForName(“GBK”); // get the codec for GBK
QString unicodeString = codec->toUnicode( locallyEncoded );

http://www-128.ibm.com/developerworks/cn/l…oolkit/qt/i18n/

Qt 国际化编程
——————————————————————————–
内容:

1. Qt 的文本显示

2. Qt 的文本输入

3. Qt 的打印

于明俭

2002 年 1 月 09 日

本篇讨论 Qt 库对国际化的支持,将介绍 Qt 对文本显示,输入和打印的支持,和如何 使用Qt 开发国际化的软件。
Qt 目前的版本(2.2.4)对国际化的支持已经相当完善。 在文本显示上,Qt 使用了Unicode 作为内部编码,可以同时支持多种编码。 为 Qt 增加一种编码的支持也比较方便,只要 增加该编码和Unicode的转换编码便可以了。 Qt 目前支持ISO标准编码ISO 8859-1, ISO 8859-2,ISO 8859-3,ISO 8859-4,ISO 8859-5,ISO 8859-7,ISO 8859-9,和 ISO 8859-15(对于阿拉伯语和希伯来语的支持正在开发之中),中文GBK/Big5,日文 eucJP/JIS/ShiftJIS,韩文eucKR,俄文KOI8-R。 当然也可以直接使用UTF8编码。

Qt 使用了自己定义的Locale机制,在编码支持和信息文件(Message File)的翻译上弥补了目前Unix上所普遍采用Locale和gettext的不足之处。 Qt 的这种机制可以使 Qt 的同一组件(QWidget)上同时显示不同编码的文本。 比如,Qt 的标签上可以同时使用中文简体 和中文繁体文本。

在文本输入上,Qt 采用了XIM(X Input Method)标准协议,可以直接使用XIM输入服务器。由于目前的绝大多数输入服务器都是针对单一语言的,所以在 Qt 的标准输入组件( QLineEdit,QMultiLineEdit)中的输入受到单一编码的限制,Qt 还不支持动态切换编码输入的支持,这是它的不足之处。

1. Qt 的文本显示
——————————————————————————–
像普通的国际化过程一样,Qt 使用了类似GNU gettext一样的函数 QObject::tr(),它 用于从Qt的信息文件 .qm 中取出信息,这些信息是经过 Qt 的工具处理的。 Qt在处理 编码时还使用了 QTranslator 类,可用于指定整个应用软件的 的信息文件。

使用 Qt 编写国际化的程序,最好不要在程序中直接使用特殊编码的文本。 比如要 编写一中文界面的 Qt 程序,应该在程序中使用英文,程序编写完成后,把文本提取 出来翻译。 这样,程序还可以根据Locale的不同,支持多种语言。 下面介绍如何在 Qt 程序中标注字符串,如何提取并翻译文本。
下面是一段使用了 QObject::tr()的代码,它建立了一个弹出菜单,菜单项是”Quit”, 它被放置在菜单条上,在菜单条上显示的是标签”File”。

QPopupMenu* popup;
popup = new QPopupMenu( this );
popup->insertItem( tr(“&Quit”),qApp,SLOT(quit()) );
menubar->insertItem( tr(“&File”),popup );

对于绝大多数情况,可以用上述方法处理。不过有时在定义某些变量中使用的字符串,不能使用上述方法,但是为了让Qt提取并翻译该字符串,必须用某种方法标志出 来。Qt 定义了 QT_TR_NOOP() 和 QT_TRANSLATE_NOOP() 来标志它们。前者用于单个字符串,后者用于多个字符串。比如,

static const char* strings[] = {
QT_TR_NOOP( “Hello” ),
QT_TR_NOOP( “World” )
};

有时需要使用printf/sprintf之类的函数动态生成字符串,比如,

QStings s;
s.sprintf( “Button %d”,i );
but->setText( s );

对这种使用方式的国际化是使用 arg() 函数。

QString s = tr( “Button %1” ).arg(i);
but->setText( s );

提取上述信息的方法是使用 Qt 提供的工具 findtr 命令:

findtr [filename].cpp > i18n.po

它类似于GNU的 xgettext,上述文件的提取信息文件内包含,

….
“Content-Type: text/plain; charset=iso-8859-1\n”

#: i18n.cpp:34
msgid “ExampleWidget::&File”
msgstr “”

接下来是文本翻译过程。 在Qt中翻译信息文件时应该注意以下事项: (1) 提取的信息文件的编码是iso-8859-1,在翻译成某种语言(编码)时应该 注意改动它的字符集,比如对中文GB2312和Big5编码,应该是, “Content-Type: text/plain; charset=gb2312\n”或者”Content-Type: text/plain; charset=big5\n”。 (2) 提取的信息有一个范围,比如上面的文件指定的范围是 ExampleWidget, 在翻译 前应该把它去掉,变成 msgid “::&File”。(3) 被翻译的字符串可能含有加速键符号,如 “&File”中的”F”,如果翻译成中文最好保留该信息,它可以翻译成 “文件(&F)”。

对于翻译后的文件(比如上面的翻译文件存为 i18n_gb.po),必须使用 Qt 提供的 工具 msg2qm 把它转换为 .qm 文件才能使用,

> msg2qm i18n_gb.po i18n_gb.qm

它类似于GNU的 msgfmt 命令。翻译后的文件可以用Qt程序直接调用。

QTranslator *translator = new QTranslator(0);
translator->load(“i18n_gb.qm”,”.”);
qApp->installTranslator(translator);

此外,Qt 还提供了类似于 msgmerge 的工具 mergetr,它用于把新提取的信息 文件和已经翻译过的信息文件融合起来,在此不再赘述。

在 Qt 中也可以直接使用 QTextCodec 来转换字符串的编码,这为在Qt下开发纯 中文软件带来了便利条件,不过这种方法不符和国际化/本地化的习惯,

char *string = “中文和English混和字符串!”
QTextCodec* gbk_codec = QTextCodec::codecByName(“GBK”);
QString gbk_string = codec->toUnicode(string);
QLabel *label = new QLabel(gbk_string);

如果使程序只支持一种编码,也可以直接把整个应用程序的编码设置为GBK编码, 然后在字符串之前 加tr(QObject::tr),

qApp->setDefaultCodec( QTextCodec::codecForName(“GBK”) );
QLabel *label = new QLabel( tr(“中文标签”) );

如果使Qt根据Locale的环境变量取得字符集,可以使用 QString::fromLocal8Bit(str)。

本节的例子请参见 qt-i18n-example.tar.gz

2. Qt 的文本输入
——————————————————————————–
在输入方面,Qt 的输入条(QLineEdit)和编辑区(QMultiLineEdit)都支持 XIM,只要配合相应的输入服务器,便可以输入中文/日文/韩文。目前有许多支持XIM的软件,比如 中文: Chinput/xcin/rfinput/q9,日文: kinput2/skkinput,韩文: ami/hanIM。

Qt程序的缺省输入风格是OverTheSpot风格,它也支持 OffTheSpot风格和 Root风格。 用户可以在起动程序时在命令行指定输入风格,比如对程序app,

./app -inputstyle overthespot #缺省风格,光标跟随
./app -inputstyle offthespot
./app -inputstyle root

经过 MiziLinux 补丁的Qt-2.2.0 支持 OnTheSpot 输入风格,并且把它作为 缺省的输 入风格。请参见 http://www.mizi.com/ko/kde/doc/onthespot/onthespot.html。

Qt 中的任何一个 Widget 都可以接受输入,只要它可以有键盘聚焦(Keyboard Focus)。所以对特殊 Widget 的输入处理只需要截获键盘输入,获取从XIM服务器 来的字符串。 对于OverTheSport风格的支持,刷新XIM输入服务器的位置即可。

3. Qt 的打印
——————————————————————————–
在打印方面,XWindow下的 Qt 生成PostScript并使用lpr打印。 它含有QPrinter类, 可以方便地支持输出页面的控制。 对于中文打印,必须修正PostScript文件的输出 部分。

TOpia中文化
——————————————————————————–
一:字符集介绍

我国已经颁布了多种中文信息编码标准,常用的有:GB2312-1980、GB12345、GB13000(GBK)以及最新标准GB18030,其中 GB13000是对GB2312的扩展,又常被成为GBK,GB18030向下兼容GB2312和GBK,中文WINDOW98、中文WIN2000操作系统采用的中文字符集是GB2312。

GB2312字库仅覆盖双字节部分,存储位置索引是编码中每字节的第8bit置0得来的,如A1A1编码汉字在字库中的索引是2121,而非A1A1。以下是它的编码规则:

单字节:00~7F

双字节:A1~F7 A1~FE

GBK的编码规则是:

单字节:00~7F

双字节:81~FE 40~7E

80~FE

GB18030是最新的汉字编码标准,其编码为一、二、四变长编码:

单字节:00~7F

双字节:81~FE 40~7E

80~FE

四字节:81~FE 30~39 81~FE 30~39

Unicode编码采用等长编码,二个字节表示一个字符编码,对于ASCII码也采用双字节来表示,unicode使用二维空间来描述编码空间,平面分为256行、256列,对应于编码的高低字节。

二:Qt 国际化编程

在文本显示上,Qt 使用了Unicode 作为内部编码,为了程序的国际化,通常我们在文本显示的地方不直接输入本地字符,用英文代替,比如要编写一中文界面的 Qt 程序,应该在程序中使用英文,程序编写完成后,把文本提取出来翻译。对于需要翻译的地方,首先是在该文本处用tr()函数标识,同时制作出.qm信息文件,并在程序中加入QTranslator即可。比如我们在某一程序中有如下语句:

setCaption(tr(“main window”));

为了能显示中文,有两种方法:

方法一:
——————————————————————————–
修改工程文件,加上TRANSLATIONS = xxx.ts

lupdate 工程文件名

用linguist编辑刚生成的xxx.ts文件并保存

lrelease 工程文件名 xxx.qm

在main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

QTranslator *translator = new QTranslator(0);
translator->load(“xxx.qm”,”.”);
qApp->installTranslator(translator);

方法二:
——————————————————————————–
findtr 文件名(通常为CPP文件) > xxx.po

编辑po文件,其中charset需由iso-8859-1改为GB2312,然后将“main window”翻译成“主窗口”

msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm

在main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

QTranslator *translator = new QTranslator(0);
translator->load(“xxx.qm”,”.”);
qApp->installTranslator(translator);

方法三:
——————————————————————————–
有时我们只是提供给本地用户使用,无需国际化,QT提供这一支持,在QT中有许多本地字符集同unicode的转换引擎,他们皆为QTextCodec的派生类,如QGbkCodec、QJisCodec, QHebrewCodec等。如:

QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

QString caption=“主窗口“;

QTextCodec *gk_codec=QTextCodec::codecForName(“GBK”);

setCaption(gk_codec->toUnicode(caption));

从上面可以看出,使用转换引擎可以轻松实现中文显示,简要步骤如下:

1:修改main.cpp文件,将字体改为unifont

QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

2:在想汉化的内的头文件中加入QTextCodec指针变量和转换函数QString mytr(char *)

#include <qtextcodec.h>

QTextCodec* gbk;

QString mytr(const char *);

3:在想汉化的类的实现文件中,修改类构造函数,加入:

gbk=QTextCodec::codecForName(“GBK”);

4:在想汉化的类的实现文件中,添加mytr函数代码

QString Form1::mytr(const char* chars)

{

return gbk->toUnicode(chars,strlen(chars));

}

5:在想汉化的类的实现文件中,用“mytr”替换“tr”

2004-12-2 测试了上面的方法三,编译通过,如果将codec成员变量改成QTextCodec派生类变量,编译将通不过,比如将QTextCodec* gbk;改成QGbkCodec* gbk;编译将报告此处有语法错误。下面是相似的用法:

1:修改***.cpp文件,在顶部加入codec头文件

#include <qgbkcodec.h>

2:在***.h文件中,加入mytr()函数声明

QString mytr(char* buffer,int size);

3:在***.cpp文件中,加入mytr()定义

QString mytr(char* buffer,int size)

{

QGbkCodec* gbk=QTextCodec::codeForName(“GBK”);

return gbk->toUnicode(buffer,size);

}

4:在需要显示中文的地方,使用mytr函数即可

5:修改main.cpp文件,将字体改为unifont

QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

备注:在翻译或转换之前必须将Unicode字体调入,否则显示不出中文,网上相关文章并未提及这一点,如果不显式装载该字体,系统默认的是Latin1,于是汉字显不出来。

备注2:在编译qt/embedded之前,必须修改qconfig-qpe.h配置文件的内容,将与TextCodec相关的宏定义给去掉,否则QTextCodec::codecForName(“GBK”)将返回NULL指针。

备注3:使用findtr命令时可同时查找多个文件的tr(),并将查找结果都放入一个文件内,源文件以空格隔开即可,另外,生成的.po和.qm文件的文件名最好与工程文件名相同!

备注4:如果要显示繁体中文,则需要使用QTextCodec::codecForName(“big5”)。获取本地的使用语言,用 QTextCodec::locale(),它返回Qstring变量,通常如果是中文本地的话,通常其值为zh_CN.GB2312和 zh_TW.Big5,根据这个返回字符串,可以加载相应的codec。如果程序只支持一种编码,也可以直接把整个应用程序的编码设置为一个默认的编码标准,比如系统只需要显示中文和英文,则可以直接设置应用程序的默认编码标准是GBK,如下使用方法:

qApp->setDefaultCodec( QTextCodec::codecForName(“GBK”) );

QLabel *label = new QLabel( tr(“中文标签”) );

备注5:如果使用本地的字符转换器,可以使用Qstring的静态函数Qstring::fromLocal8Bit(char* buffer,int size),将本地字符串转换成UNICODE字符串,不过要设置好LANGUAGE环境变量。

三:QTOpia中文化
——————————————————————————–
findtr 文件名 > xxx.po

编辑xxx.po文件

msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm

拷贝可执行文件到QPEDIR/bin目录

拷贝xxx.po和xxx.qm文件到QPEDIR/i18n/zh_CN目录

进入QPEDIR/apps/Applications目录创建一新.desktop文件

iconv –f utf8 –t GB18030 xxx.desktop > xxx1.desktop

编辑xxx1.desktop文件,主要是修改Exec、Icon、Name和Name[zh_CN]四项

iconv –f GB18030 –t utf8 xxx1.desktop > xxx.desktop

rm –f xxx1.desktop

qvfb –depth 16 &

cd $QPEDIR/bin

./qpe

备注:如果你的系统中有多个qtopia版本,要特别注意QTDIR、QPEDIR、LD_LIBRARY_PATH环境变量

备注2:可按照此方法汉化qtopia自带的应用程序

备注3:po文件是中间文件,程序真正需要的是qm文件。iconv是系统自带的内码转换工具,它能将utf8编码的文件转换成gb18030编码的文件,反之也能,转换这一步必不可少,因为desktop文件缺省是utf8编码的,而我们的redhat linux 7。3中文操作系统用的却是gb18030,所以在编辑器打开前需转换。

四:汉化qtopia-1.5.0 for Arm
——————————————————————————–
首先按照“三”的方法对要汉化的程序提取*.qm文件和*.desktop桌面配置文件,在做完这一步后,将*.qm文件down到目标机的 /opt/qtopia-free-1.5.0.arm/i18n/zh_CN目录下,同时将*.desktop文件覆盖/opt/qtopia- free-1.5.0.arm/apps目录下的相应文件,目标机的环境变量配置如下:

export QTDIR=/opt/qt-2.3.3.arm

export QPEDIR=/opt/qtopia-free-1.5.0.arm

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=$QPEDIR/bin:$PATH

export LANG=zh_CN

开机启动,由于设置的语言为简体中文,qpe会自动为每个应用加载Unifont字体,以及简体中文目录下的翻译文件,因而显示出中文,翻译文件是一个方面,但更关键的是要显示中文必须有中文字体来支持,Unifont字体包含中文字,因而能显示中文,没有相应字体的支持,光有翻译文件是显示不出中文的!

在经过以上的步骤后,有的应用在显示上依然会显示方框,这多半是由于该窗体相关的字体可能不是支持中文的字体,这需要直接修改源代码,以下是在汉化qtopia-free-1.5.0.arm的过程中的相关记录:

1. 在编译qtopia的过程中,可能会报告找不到SetButtonGroupID()函数,编译通不过。这是由于库中并没有该函数,一般情况下将该语句隐藏掉,原代码的原意是设置Button按钮在ButtonGroup组的序号,隐藏该语句对应用无影响。出现这个问题,主要在 /netsetup/dialup/dialupbase.cpp文件和/taskbar/shutdown.cpp文件,shutdown.cpp文件的相应行号是:96、149、201、253行。

2. 修改mpegplayer/playlistwidget.cpp文件的143行和166行,将字体设置改为Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉该语句

3. 修改snake/interface.cpp的87行和186行,将字体设置改为Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉该语句

4. 修改qasteroids/view.cpp的104行和qasteroids/toplevel.cpp的109行和165行,将字体设置改为 Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉该语句

5. 修改sysinfo/versioninfo.cpp文件,将61行的builder改为作者本人,将50行的v改为tr(“corpname”),重新建立po文件,并翻译corpname为 您希望的名字,使用msg2qm生成qm文件

6. 修改桌面,位于taskbar目录下,生成libqpe.po和libqpe.qm文件,并将libqpe.qm文件拷贝到i18n/zh_CN目录下

五:qtopia目录结构
——————————————————————————–
apps/Applications:应用程序桌面配置文件

apps/Games:游戏桌面配置文件

apps/Settings:系统设置桌面配置文件

bin:二进制可执行文件

configs:编译配置文件目录

doc和docs:qtopia的参考文档

etc:应用配置文件目录

i18n:国际化目录

i18n/zh_CN:简体中文目录

include/qpe:与qtopia相关的头文件目录

inputmethods:输入法

library:qtopia部分源代码目录

pics:与应用相关的图片存放目录

plugins:各种插件目录,如mpeg3解码插件、输入法插件等

sounds:音频文件存放目录

taskbar:桌面程序的源代码(qpe的源代码)

Flash Game: 攻城(Castle Smashers)

Posted by – January 4, 2010

游戏网址:http://blog.bingo929.com/category/funnys/gaming

http://blog.bingo929.com/wp-content/uploads/2009/01/DonutGames_CastleSmashers.swf

游戏:攻城(Castle Smashers)

2009年01月10日 | 暴风彬彬

在线游戏-攻城

作为办公室一族的你,一整天对着办公文件和电脑是不是很枯燥?如果是的话,就在老板不在的时候偷着玩会小游戏吧,不但放松精 神,而且有在线分数排名哦…

这个游戏上手并不难,但是很有可玩性哦!而且能更好的了解物理学,哈哈。只要你在规定数量的炮弹内将城堡完全毁掉就过关,一共五官,后面还是很有难 度的噢。用你的完美表现得到更多的分数吧!

操作方法:

鼠标控制投弹的方向;按下左键开始蓄力(观察”POWER”畜力槽),松开左键发射炮弹;
每过一关可以选择在下一关增加一个炮弹或增加炮弹的弹性或增加一个士兵;差不多就这些,加油哦!

怎么样,如果你觉得这个游戏还不错,那就把网址发给你的朋友们吧,跟他们比比谁的分数更高!

GnuWin by gnuwin32

Posted by – January 3, 2010

http://sourceforge.net/projects/gnuwin32

GnuWin provides Win32-versions of GNU tools, or tools with a similar open source licence. The ports are native ports, that is they rely only on libraries provided with any 32-bits MS-Windows operating system, such as MS-Windows 95 / 98 / 2000 / NT / XP /

Configure SMTP plugin for WordPress

Posted by – January 2, 2010

Configure SMTP

Get WordPress work for receiving mail from new user registering…

Author:Scott Reilly
Version:2.7
Last update:31 December 2009
Compatibility:WP 2.8+, 2.9+
Comments:go here
Download:[ zip ]
Description:

Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).

Extended Description

Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).

This plugin is the renamed, rewritten, and updated version of the wpPHPMailer plugin.

Use this plugin to customize the SMTP mailing system used by default by WordPress to handle *outgoing* e-mails. It offers you the ability to specify:

* SMTP host name
* SMTP port number
* If SMTPAuth (authentication) should be used.
* SMTP username
* SMTP password
* If the SMTP connection needs to occur over ssl or tls

In addition, you can instead indicate that you wish to use GMail to handle outgoing e-mail, in which case the above settings are automatically configured to values appropriate for GMail, though you’ll need to specify your GMail e-mail (included the “@gmail.com”) and password.

Regardless of whether SMTP is enabled or configured, the plugin provides you the ability to define the name and email of the ‘From:’ field for all outgoing e-mails.

A simple test button is also available that allows you to send a test e-mail to yourself to check if sending e-mail has been properly configured for your blog.

Find out more at the plugin’s WordPress Plugin Repository page.

想健康 男人每天必吃的8种食物

Posted by – January 2, 2010

最近,美国某男性杂志日前刊登了一篇题为“男人每天必吃的八种食物”的文章。看后,觉得这几种食物在我们的生活中也是常见的,且比较便宜,值得推 广。这八种食物是:菠菜、酸奶酪(或酸奶)、西红柿、胡萝卜、蓝莓(或草莓、紫葡萄)、黑豆(或豌豆)、核桃、燕麦。

其中菠菜名列前茅。
1、谈到菠菜,我们总觉得里面的叶酸比较多,吃容易产生结石。但有专家指出:叶酸对于男人来说是举足轻重的。叶酸不但可以帮助肱二头肌收缩有 力,而且可与菠菜中同含的3脂肪酸一起提供肌肉生长所需要的能量,还可使肌肉对胰岛素更敏感,有利于增大肌肉减少脂肪。

美国专家认为,菠菜能促进肌肉生长,菠菜中含有的3脂肪酸和叶酸,能为肌肉的合成提供一定能量,叶酸还能够加快通往生殖器官的血液循环,提高性 能力。

对于老年人来说,菠菜一个突出的优点是其富含的叶黄素能延缓老年黄斑的恶化。多吃菠菜能预防人体视网膜老化脱落,因为菠菜含有抗氧化物质,可防 治老年人眼睛的“黄斑变性”,延缓老年人黄斑的退行性变与老化而导致的眼盲症或视力下降。

2、酸奶,生活中有一种说法:男人喝牛奶,女人喝酸奶营养更好。其实酸奶不仅女人要喝,男人更要喝。因为酸奶在发酵过程中,产生蛋白质分解酶, 它分解了部分蛋白质后产生大量氨基酸,使更易被人体所吸收。乳酸菌经过消化道时(大肠、小肠)起着抗菌和防腐的作用,调节肠道中微生物菌群平衡。长期进食 酸菌可降低人体胆固醇水平。防止白内障的形成。

3、西红柿含有丰富的维生素C,是防癌抗癌的首选果蔬,被一些人番茄性甘、酸、微寒,有生津止渴,健胃消食,凉血平肝,清热解毒,降低血压之功 效,对高血压、肾脏病人有良好的辅助治疗作用。尤其是男人吃西红柿可以增加生殖细胞。西红柿炒鸡蛋是很好的营养菜哦。

4、胡萝卜在我国民间,人们称之为“小人参”。胡萝卜素在人体内可转化为维生素A。近几年研究发现,维生素A缺乏的人,癌症发病率要比普通人高 2倍。每天若吃适量的胡萝卜,就可以大大降低肺癌的发病率,甚至对已经转化了的癌细胞有抑制作用。实践证明,胡萝卜具有防癌、抗癌作用。另外,它还有保护 眼睛的作用。

5、蓝莓、草莓、紫葡萄它们的营养价值相似,就拿紫葡萄来说吧,它的汁中含一种抗氧化剂多酚最高,活性最强。紧随其后的是苹果汁和酸果汁,而橘 子汁中的多酚含量最少。抗氧化剂在保护人体免受自由基损害方面发挥关键作用,它通过抑制自由基来维持身体氧化平衡,延缓衰老,并能降低癌症和心脏病等疾病 的发病风险。

6、黑豆有豆中之王的美称。黑豆,主要产于印度、缅甸和巴基斯坦等国家,其含有丰富的蛋白质、维生素E、B群、钙、铁、亚麻油酸及卵磷脂等成 份,在古代许多药典中,都曾经记载黑豆具有“驻颜、明目、乌发、使皮肤变白嫩”等效果,比如唐代的《本草拾遗》记载,黑豆能“明目镇心,温补。久服,好颜 色,变白不老。”;明代《本草纲目》记载“李守愚每晨水吞黑豆二十七枚,到老不衰”;而苏东坡也曾记述当时京城内外,少男少女为了养颜美容而服食黑豆。可 见黑豆的营养价值。

7、核桃号称长寿食品。富含脂肪,其所含脂类有亚油酸甘油脂,并有亚麻酸及油酸甘油脂,对减少胆固醇在血中升高有益,适合动脉硬化、心脑血管病 患者。核桃含磷脂较高,可维护细胞正常代谢,增强细胞活力,防止脑细胞的衰退,是良好的健脑食品。磷脂中的胆碱可促进肝细胞中的脂肪代谢,从而减轻脂肪肝 的程度,核桃中含赖氨酸较多,可升高血清白蛋白及维持体重,对治疗肿瘤、结核等消耗性疾病有利,并且核桃中含有胡桃醌,对某些移植性肿瘤有抑制作用。

8、燕麦可以有效地降低人体中的胆固醇,经常食用,对中心脑血管病起到一定的预防作用;对糖尿病患者也有非常好的降糖、减肥的功效;燕麦粥有通 大便的作用,很多老年人大便干,容易导致脑血管意外,燕麦能解便秘这忧;它还可以改善血液循环,缓解生活工作带来的压力;含有的钙、磷、铁、锌等矿物质有 预防骨质疏松、促进伤口愈合、防止贫血的功效,是补钙佳品;燕麦中含有极其丰富的亚油酸,对脂肪肝、糖尿病、浮肿、便秘等也有辅助疗效。

Fonts for Unix

Posted by – January 1, 2010

文泉驿——开彼源兮,斯流永继TM

文泉驿计划:开发电子汉字资源,宏扬自由中文精神,点击查看详情
文泉驿主站: http://wqy.sf.net | http://wenq.org/

Ipmsg

Posted by – January 1, 2010

IPmsg for Windows:
http://www.ipmsg.org