1、 下面是写接口。在qpe中,采用inputmethodface,作为plugins方式实现,现在在murphytalk代码的Pinyinlmpl.cpp中。仿照其中的connect方法实现输入法接口。例子代码参考http://www.diybl.com/course/3_program/c++/cppjs/20090307/158903.html
我的做法是直接用test.*换掉原来的PinyinImpl.*。注意修改test.cpp中的include。
2、 编写试验程序。用一个简单的LineEdit加上PinyinFrame的实例便可测试究竟输入法可不可行。我写了一个简单的main.cpp如下:
#include <qapplication.h>
#include "PinyinImpl.h"
#include <qnamespace.h>
int main(int argc, char** argv)
{
QApplication app(argc,argv);
app.setFont(QFont("unifont"));
Main *m=new Main;
m->show();
QObject::connect(&app,SIGNAL(lastWindowClosed()), &app,SLOT(quit()));
return app.exec();
}
3、 重新生成pro文件。由于增加了main.cpp,需要重新组织程序,可以在原有pro文件中修改,也可以用qmake –project直接生成一个新的。我的做法是后者。不过要注意生成的pro文件中要去掉没用的。比如scim中的main.cpp。这些代码都是原来开发时候测试的,现在不需要,否则会出现多个main.cpp的错误。
4、 Qmake 生成Makefile。
5、 Make all。不出意外,会发现错误:
PinyinFrame.h:110: 错误:有多余的限定‘QPinyinFrame::’ 在成员 ‘get_char’ 上
PinyinFrame.h:114: 错误:有多余的限定‘QPinyinFrame::’ 在成员 ‘get_phrase’ 上
make: *** [.obj/release-shared-mt-emb-x86/main.o] 错误 1
这个挺奇怪的,我直观地去掉了QpinyinFrame后通过。出现新错误:PinyinFrame.cpp:198: 错误:redefinition of ‘void QPinyinFrame::resizeEvent(QResizeEvent*)’
PinyinFrame.cpp:184: 错误:‘virtual void QPinyinFrame::resizeEvent(QResizeEvent*)’ 已在此定义过
这个可能是因为打补丁时候不小心写了两次,直接把其中重复的内容去掉一个。出现新错误:
PinyinFrame.cpp: In member function ‘virtual void QPinyinFrame::mouseReleaseEvent(QMouseEvent*)’:
PinyinFrame.cpp:735: 错误:‘Global’ 未声明
PinyinFrame.cpp:736: 错误:‘Global’ 未声明
make: *** [.obj/release-shared-mt-emb-x86/PinyinFrame.o] 错误 1
这个原因是使用了qpe的东西,我暂时不知道如何处理,直接注释掉。键盘不能消失就是了。编译通过。
12、现在在当前目录MurphyPinyin目录下生成了MurphyPinyin可执行文件。可以在qvfb下查看。不过你可能发现只能输入英文不能输入中文。最后一招:在PinyinFrame.cpp的SendKey(int u, int c)里加一句emit key(u,c,0,true,false);重新编译,OK。(本想贴张图出来,不了老师显示不出来,罢了!)
有可能还会出现按键自动重复等问题,请google关键字“Murphytalk的qte移植”,相信可以找到答案