虚拟机:UBUNTU11.10 交叉编译器:友善4.5.1
本方法参考一些网上的方法,但是说的更加详细。
1.首先就是网上下载syszuxpinyin的源码,下载完毕后,把它拷贝到ubuntu中,然后解压到/opt/目录下(这里目录根据自己爱好选择)
2.修改syszuxpnyin.pro文件
TEMPLATE = lib
在.pro中添加
RESOURCES += syszuxpinyin.qrc(可能已经修改完毕)
3. qmake
4. make
这里要说明一下。因为SYSZUXpinyin只能用到arm平台,不能用在x86ip平台,原因是SYSZUXpinyin的实现,用到了一个QWSinputMethod的类,这个类是arm平台的qt库所特有的。还记得我们在终端里启用qt程序后面要加个-qws参数,原因就在这。
所以在要先声明自己的QTDIR,因为qmake的版本与QTDIR有关。我这里选择的QTDIR是arm版本的:/usr/local/Trolltech/arm-Qt-4.7.0
于是编译出来的库文件也是对应arm平台的,刚开始我的QTDIR是对应x86的,所以在后面的步骤中总是找不到库文件。后来才发现编译库的时候就选错了qmake。查看自己的qmake路径可以 which qmake 查看。我这里which qmake为:/usr/local/Trolltech/arm-Qt-4.7.0/bin/qmake
把生成的
libSYSZUXpinyin.so
libSYSZUXpinyin.so.1
libSYSZUXpinyin.so.1.0
libSYSZUXpinyin.so. 1.0.0
拷贝到目标板(arm板)QTDIR的lib路径下面,我的是/usr/local/Trolltech/arm-Qt-4.7.0/lib/ 。同样也到拷贝到$QTDIR/lib下。也是/usr/local/Trolltech/arm-Qt-4.7.0/lib/ 。
二.然后是把输入法编译到Qt中
将源码包中的syszuxim.h和syszuxpinyin.h头文件和syszuxpinyin.ui面板放置到你Qt程序的源代码路径下,把syszuxpinyin.ui添加到QT creator工程的Forms里。
1. qmake -project生成.pro文件
将.pro文件中添加 LIBS += -L/(有libSYSZUXpinyin.so这些库的路径) -lsyszuxpinyin (第二个一定是小l,大L为在指定路径下寻找,小l为连接库)
在主界面源文件 .cpp中加入
#include "syszuxpinyin.h"
#include "syszuxim.h"
在要用的类的头文件里添加也行。
并在需要启动输入法的函数里面加
QWSInputMethod* im = new SyszuxIM;
QWSServer::setCurrentInputMethod(im);
这样就安装好了输入法。
但是并没有弹出软键盘。在以上两行下面可以写出弹出软键盘的指令:
im->updateHandler(QWSInputMethod::FocusIn);
(自然,要隐藏软键盘参数用FocusOut,这条指令会自动检测到有光标闪烁的编辑框然后弹出软键盘);
弹出了软键盘,但是中文字符为乱码,那么在工程文件的main函数里“MainWindow w”这一行下面添加如下一行:
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
可以显示中文,注意,只添加这一行,编码方式不对或者多添加了其余的两行都是不能正常显示的。
主函数里设成GB2312后,除了按钮上的汉字可以正常显示外,其他的如标题等都不能正常显示了。因为我们的linux下qt默认的中文环境是UTF-8格式,要正常显示中文必须转化成UTF-8格式。解决方法是:在头文件里#include <QTextCodec>,然后定义: QTextCodec *tc; 在对应的.cpp的构造函数里加上:tc = QTextCodec::codecForName("UTF-8"); 就可以都显示中文了。
注:请注意一开始编译syszuxpinyin库的时候一定要先设置好QTDIR,要不然后面都出错。我就在这里浪费了一个下午的时间。下次编译库的时候一定要分清楚对于哪个平台就选择哪个平台的编译器。
另外按照上面的放发现主界面的标签上的中文、还有按钮的中文都不能显示,可是按一下按钮又显示了,后来就索性直接指定 ./hello -qws -font wenquanyi,wenquanyi是中文字库。这样就可以直接显示了。