大家好,我现在在研究拼音输入法的移植,碰到以下问题无法解决。
将下载的murphypinyin0.03.tar.gz解压并打上软键盘补丁,从ipk文件中找到几个配置文件,并在Murphypinyin的源代码中设置好配置文件的路径,make all后生成.so文件,将.so文件放到qtopia-1.7.0下面的plugins/inputmethod目录下,启动qtopia-1.7.0/bin/qpe -qws桌面程序,所有输入法都正常显示和使用。(用qvfb和烧进开发板都可以)
现在我不使用桌面系统,只用我自己的程序,假定程序名为hello,我打算把拼音输入法集成到我自己的程序中。具体做法如下:
1,在
makefile文件中令 LFLAGS = -L$(QTEDIR)/plugins/inputmethods -lmurphypinyin,
2,在主程序的窗体构造函数最后调用下面的函数:
void FrmHello::showKbd()
{ //libInputMethod是QLibrary* 的指针 QLibrary* libInputMethod;
libInputMethod = new QLibrary( "murphypinyin" , QLibrary::Immediately );
if ( !libInputMethod ) printf("lib murphypinyin is not loaded!\n"); //如果libInputMethod 为空,则动态链接库
没有调用成功
else {
QString str = libInputMethod->library(); //libInputMethod 的成员函数library 中保存的是动态链接库的文件名
if ( libInputMethod->isLoaded () == TRUE ) cout<<"lib "<<str<<" is loaded!"<<endl; //>isLoaded 成员函数也是判断动态链接库有没有调用成功的,我使用了两种方法判断有没有调用成功,这里如果为真,则打印出装载的动态链接库的文件名
else cout<<"lib "<<str<<" is not loaded!"<<endl;
}
InputMethodInterface *iface = 0; //输入法的接口指针
if ( libInputMethod->queryInterface( IID_InputMethod , (QUnknownInterface**)&iface ) == QS_OK && iface ) //将动态链接库(也就是输入法)里的函数指针赋值到iface中,以后通过iface就可以访问动态链接库中的函数了
{
QWidget *mywidget; //定义一个窗体指针
kbdButton->setUsesBigPixmap( TRUE );
kbdButton->setPixmap( *iface->icon() ); //将动态链接库中输入法的
图标加载到
按钮上
cout<<"The InputMethod Name is "<<iface->name()<<"!"<<endl; //输出动态链接库中输入法的名字 Murphypinyin
mywidget= iface->inputMethod( 0 , inputWidgetStyle ); //将动态链接库中输入法窗体指针赋值到mywidget
iface->resetState();
mywidget->resize( 290, 90 );
mywidget->move( 10, 90 );
mywidget->show(); //显示输入法
input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) ); 绑定按键
}
}
3,make后
编译通过,运行则会出现段错误。虽然出现段错误,但是动态链接库中输入法的图标已经成功加载到按钮上,输入法的名字也成功打印出来,就是窗体赋值后出现段错误,将所有窗体的操作都注释掉,则程序不出现段错误。
如果将makefile文件中-lmurphypinyin换成原
qtopia中自带的输入法如手写(-lqhandwriting),英文软键盘(-lqkeyboard),pickboard输入法以及unikeyboard输入法并将对应的QLibrary( "murphypinyin" , QLibrary::Immediately )中也替换成系统中自带的,则hello程序显示正常,(qvfb -width 240x320 &, ./hello -qws)
拼音输入法和系统自带的输入法的区别在于拼音输入法运行时要用到几个txt文件来查找汉字以及保存自造词,
其他输入法没有,难道是这个原因吗?
请各位大侠分析一下是,小弟在此感激不尽!!
本人q q : rainco2008#qq.com
[ 此帖被qiuyu82在2010-09-07 16:13重新编辑 ]