⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arm-howto

📁 arm9上安装qte3的一点心得
💻
字号:
将arm-linux-gcc-3.3.2.tar.bz2解压并复制到/usr/local目录下,~$ export PATH=/usr/local/arm/3.3.2/bin/:$PATH编译TSLIB1.3:~$ ./autogen.sh  #生成configure文件~$ export CC= /usr/local/arm/3.3.2/bin/arm-linux-gcc~$ export CXX=/usr/local/arm/3.3.2/bin/arm-linux-g++~$ ./configure --host=arm-linux --target=arm-linux --disable-inputapi --prefix=/home/zgq/build~$ make~$ sudo make install        将build的整个目录拷贝到arm目标机,然后在目标机修改/etc/profile文件(见后)。在ubuntu下安装qt3.3.8b(X86)编译ARM9平台下的qte3:~$ cd qt-embedded-free-3.3.8b/~$ export QTDIR=$PWD~$ export QTEDIR=$PWD~$ cp /usr/bin/uic ./bin/~$ gedit ./src/embedded/qmouselinuxtp_qws.h    文件中加入:	#ifndef QT_NO_QWS_MOUSE_LINUXTP	#define QWS_MOUSE_IPAQ	#define QWS_MOUSE_IPAQ_RAW	#define QT_QWS_IPAQ ~$ ./configure -prefix /opt/qte3-tp -depths 4,8,16 -embedded arm -xplatform qws/linux-arm-g++  -qt-mouse-linuxtp -no-cups -no-qvfb ~$ ./configure -prefix /opt/qte3-tp -depths 4,8,16 -embedded arm -xplatform qws/linux-arm-g++  -qt-mouse-linuxtp -no-cups -nomake examples -nomake demos -no-qvfb -nomake tools~$ make~$ sudo make install在.bashrc中加入三行: export QTDIR=/opt/qte3-tp export QTEDIR=$QTDIR export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH~$ sudo cp /usr/bin/uic /opt/qte3-tp/bin/~$ cd ./qt3/a3/ #在a3目录下用qt3 designer程序创建一个qt应用程序,然后用qte3(ARM)编译:zgq@zgq-heze:~/qt3/a3$ /opt/qte3-tp/bin/qmake -projectzgq@zgq-heze:~/qt3/a3$ /opt/qte3-tp/bin/qmake -spec /opt/qte3-tp/mkspecs/qws/linux-arm-g++/zgq@zgq-heze:~/qt3/a3$ make通过超级终端与dnw软件烧写default yaffs文件系统到目标板,通过修改目标板上的/etc/init.d/rsS选择启动项。通过网络连接主机与目标机:~$ sudo ifconfig eth0 192.168.1.10~$ ftp 192.168.1.230 #用户名与口令为plg用put命令将组织在当前目录下的libqte.so.3.3.8,wenquanyi_120_50.qpf,编译好的tslib.tar.gz,应用程序上传到目标板,~$ telnet 192.168.1.230Trying 192.168.1.230...Connected to 192.168.1.230.Escape character is '^]'.(none) login: root[root@(none) /]# cp /home/plg/tslib/lib/* /lib[root@(none) /]# rm /lib/libts.so[root@(none) /]# rm /lib/libts-0.0.so.0[root@(none) /]# ln -s /lib/libts-0.0.so.0.1.0 /lib/libts-0.0.so.0 [root@(none) /]# ln -s /lib/libts-0.0.so.0.1.0 /lib/libts.so     [root@(none) /]# cp /home/plg/tslib/etc/* /etc[root@(none) /]# cp -r /home/plg/tslib/share/ /usr/share[root@(none) /]# cp  /home/plg/tslib/bin/* /usr/bin/[root@(none) /]# cp -r /home/plg/tslib/include/ /usr/include[root@(none) /]# vi /etc/profile # Ash profile                                                                   # vim: syntax=sh                                                                                                                                                # No core files by default                                                      ulimit -S -c 0 > /dev/null 2>&1                                                                                                                                 USER="`id -un`"                                                                 LOGNAME=$USER                                                                   PS1='[\u@\h \W]\# '                                                             PATH=$PATH                                                                                                                                                      HOSTNAME=`/bin/hostname`                                                                                                                                        export QTDIR=/                                                                  export QTEDIR=/                                                                 export LD_LIBRARY_PATH=/home/plg/tslib/lib:/lib:$LD_LIBRARY_PATH                export QWS_DISPLAY=LinuxFb:/dev/fb0                                             export QWS_SIZE=320*240                                                         export QWS_SW_CURSOR=1                                                          export QWS_MOUSE_PROTO=linuxtp:/dev/h3600_tsraw                                 export QWS_KEYBOARD=TTY:/dev/tty0                                               #export QT_ONSCREEN_PAINT=0                                                                                                                                     export USER LOGNAME PS1 PATH                                                                                                                                                                                       export TSLIB_TSEVENTTYPE="H3600"                                                export TSLIB_CONSOLEDEVICE=none                                                 export TSLIB_FBDEVICE=/dev/fb0                                                                                                                                  export TSLIB_TSDEVICE=/dev/h3600_tsraw                                          export TSLIB_CALIBFILE=/etc/pointercal                                          export TSLIB_CONFFILE=/etc/ts.conf                                       export TSLIB_PLUGINDIR=/usr/share/ts/plugins                                                                                                                 ~                                              [root@(none) /]# vi /lib/fonts/fontdir wenquanyi wenquanyi_120_50.qpf QPF n 50 120 su[root@(none) /]# ls /lib/fonts/fontdir               wenquanyi_120_50.qpf[root@(none) /]# ls /lib/libqte.so.3 /lib/libqte.so.3[root@(none) /]#  ts_calibrate #触摸屏校准程序[root@(none) /]# /home/plg/a3 -qws #运行应用程序a3Murphytalk的qte移植:首先,把包含QPinyinFrame.cpp里qpe相关头文件全部注释了 ,把相应的 QPEapplication的代码全部注释。我用的qte3.3.6,把注释的 代码,用相应的qte下的代码代替。QPEApplication::grabKetboard 对应QWidget::grabKeyboard()QPEApplication::ungrabKetboard 对应QWidget::releaseKeyboard()这样QPinyinFrame就改好了 。下面是如何写接口,在qpe中,采用inputmethodface,作为plugins方式来现实,看了下murphytalk代码中的PinyinImpl.cpp 代码中:void QPinyinImpl::onKeyPress(QObject  *receviter,const char *slot){if(m_pinyin_frame){QObject::connect(m_pinyin_frame,SIGNAL(key(ushort,ushort,ushort,bool,bool)),                     receviter,slot);         }}关键就是这个connect,链接了输入法信号key。所以就可以仿照这个方法来实现输入法接口。例子代码:如下//test.h#include <qapplication.h>#include <qvbox.h>#include <qlineedit.h>#include "PinyinFrame.h"class LineEdit:public QLineEdit{    Q_OBJECTpublic:    LineEdit(QWidget *parent, const char *name = 0); public slots: void interpretKeyPress( ushort unicode, ushort keycode,     ushort modifiers, bool press, bool repeat ); };class Main: public QVBox{public:   Main(QWidget *parent=0, const char *name=0,WFlags f=0);private:     QLineEdit *l;    QPinyinFrame  *py;   };##########################################//test.cpp#include <qwindowsystem_qws.h>#include <qapplication.h>#include <qlineedit.h>#include "test.h"LineEdit::LineEdit(QWidget *parent, const char *name):QLineEdit(parent,name){}void LineEdit::interpretKeyPress( ushort unicode, ushort keycode,     ushort modifiers, bool press, bool repeat )    {           if(press)printf("input=%d,keycode=%d,modifiers=%d\n",unicode,keycode);     QKeyEvent ke(press ? QEvent::KeyPress : QEvent::KeyRelease,  keycode, 0, modifiers, QChar(unicode), repeat); if (press)     keyPressEvent(&ke); else     keyReleaseEvent(&ke);    }Main::Main(QWidget *parent,const char *name,WFlags f):QVBox(parent,name,f){l =new LineEdit(this);py=new QPinyinFrame(this);QObject::connect(py, SIGNAL(key(ushort, ushort, ushort, bool, bool)),   l, SLOT(interpretKeyPress(ushort, ushort, ushort, bool, bool)));}如图关于输入法有些注意事项:1。3个文件(pinyin_table.txt,murphytalk_phrase_idx.txt,murphytalk.conf)位置一定按PinyinFrame.cpp里位置放好,1个文件(murphytalk_phrase.dat)位置一定按PinyinPhrase.cpp里位置放好, 你也可以改位置。2。murphytalk.conf 设置中文字体是efont,由于没有efont,设置为unifont也可以,字体大小size,keyboard=0不显示键盘,=1显示,3。如果中文无法输入,英文可以的话,就在PinyinFrame.cpp的SendKey(int u, int c)里加一句emit key(u,c,0,true,false); 4。如果在输入中文时候会有按键自动重复情况,注释repeatTimer->start(500); 修改比较仓促,不知道功能完不完善,希望有兴趣朋友可以去试验一下,欢迎提出问题!让QT/Embedded支持国际化1、修改并重新编译应用程序,使之支持I18N编辑程序入口文件,在QApplication对象声明之后添加:   1. QTranslator translator;   2.  translator.load("pro_zh"); //假设你的qm文件名为pro_zh.qm   3.  app.installTranslator(&translator);  如果希望程序根据locale设置自动查找qm文件,可将第二行改为:translator.load(QString("pro_") + QTextCodec::locale());接着给所有需要国际化的文本加上tr方法调用,如: QLabel label = new QLabel(tr("Call")),这里tr中的参数相当于英文键,值为国际化后的各国文本,后面用到的lupdate等工具就是通过这个标志来搜索源文件需要翻译的字符串的。交叉编译程序2、生成qm文件首选在上一步中生成的pro文件中加入TRANSLATIONS的定义,内容为:TRANSLATIONS += lang_zh.ts接着使用lupdate生成ts文件,该命令根据这个TRANSLATIONS定义将当前目录下所有源文件中的需要翻译的文本提取出来放在lang_zh.ts文件中。具体执行命令是:lupdate lang.pro此时目录中会生成一个lang_zh.ts的XML格式的文件,内容类似于:   1. <!DOCTYPE TS><TS>   2.  <context>   3.  <name>QObject</name>   4.  <message>   5.  <source>Call</source>   6.  <translation type="unfinished"></translation>   7.  </message>   8.  </context>   9.  </TS>文件中source标签中Call及时之前定义的需要翻译的文本,下面要做的就是翻译,你可以用lingust工具实现,也可以自己翻译。Linugst 是Qt自带的翻译工具,一般RedHat 9.0安装Qt后都有该工具,在QT/Embedded源码目录的tools中也有该工具。自己翻译就是在lang_zh.ts文件中直接修改,针对 "Call",我们只要在相应的<translation></translation>中加入翻译的内容即可。翻译后的文件内容类似如下:   1. <!DOCTYPE TS><TS>   2.  <context>   3.  <name>QObject</name>   4.  <message>   5.  <source>Call</source>   6.  <translation type="unfinished">呼叫</translation>   7.  </message>   8.  </context>   9.  </TS>最后生成相应.qm文件,执行:lrelease lang.pro3、将编译后的二进制文件和qm文件拷贝到目标板上,执行二进制文件即可。(如果你没有看到中文而是tr函数中的要翻译的文本,这是local没设置的缘故,目标板中执行"export LANG=zh",然后执行: ./app -qws -font unifont)如果你对默认的unifont字体不满意,可以自己添加喜欢的字体附:往Qte中添加字体方法字体简介:默认情况下Qt/Embedded在lib/fonts目录下已经提供了一种可以显示中文的字体库"uniFont",包含以下几个文件: unifont_160_50.qpf unifont_160_50_t10.qpf unifont_160_50_t15.qpf unifont_160_50_t5.qpf unifont.bdf。 qpf文件是Qt/Embedded专用的一种适合嵌入式位图字体,每个文件只包含一种尺寸的字体,不能缩放,优点是占用的磁盘空间很小,一般只有 600K到1M。QTE对字体的管理通过一个配置文件"fontdir"进行的,位于$QTDIR/lib/fonts下面,内容如下:    ...    # Unifont is available in source form from http://czyborra.com/unifont/    unifont unifont.bdf BDF n 50 160 u    ...每一行是关于一种字体的设置,对应列的定义为:<字体名称> <字体文件名> <字体渲染类型> <是否斜体> <是否粗体> <尺寸> <字体标志> [尺寸列表],每列解释如下:<字体渲染类型>:可以为TTF,BDF,QPF三种类型;<是否斜体>:y表示为斜体,n表示正常体;<是否粗体>:50表示正常体,75表示粗体;<标志>:a使用ASCII字符集,u使用unicode字符集,s使用锯齿平滑(anti-aliased);<尺寸>:0,则系统从[尺寸列表]中提取可以转换的字体尺寸;以windows下的提供的华文细黑字体为例,将stxihei.ttf拷贝到$QTDIR/lib/fonts/目录中,然后编辑该目录中的fontdir文件,在文件最后加入:   stxihei stxihei.ttf TTF n 50 140 su注意:字体标志一定要加上u,说明使用unicode字符集,不然显示出现"方块"显示, 如果你想使用TrueType字体,那么不用进行下面的qpf格式转换就可以使用字体了。转换字体为QPF格式:Qt/Embedded提供了一个十分方便的工具来完成这项工作makeqpf,该工具放在$QTDIR/tools/makeqpf中。makeqpf 通过读取$QTDIR/lib/fonts/fontdir来获取需要转换的字体信息,然后生成相应的QPF字体。要使用makeqpf,在目标板中直接运行:makeqpf,然后点击你要转换的字体,转换成功之后,你会在屏幕上看见转后的字体的显示效果。或者你可以运行:makeqpf <font_name> [charset range](例如makeqpf stxihei 0-ff,4e00-fa29)注册字体:在fontdir文件中加上字体信息即可。以上述的"stxihei stxihei.ttf FT n 50 140 su"为例,通过在makeqpf中点击stxihei来生成一个华文细黑的QPF文件,文件名称为"stxihei_140_50.qpf",编辑 fontdir文件,注释掉原有的关于stxihei配置,加入新的字体信息:    #stxihei stxihei.ttf FT n 50 140 su    stxihei stxihei_140_50.qpf QPF n 50 140 su最后,确认下目标板文件系统中有以下内容:1)$QTDIR/lib/fonts/stxihei_140_50.qpf2)$QTDIR/lib/fonts/fontdir中应该有以下的配置:stxihei stxihei_140_50.qpf QPF n 50 140 su(或者stxihei stxihei.ttf FT n 50 140 su);3)应用程序目录下应该有lang_zh.qm文件。一切无误后,运行: ./app -qws -font stxihei可看到字体已经应用到程序中了。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -