• 7354阅读
  • 2回复

murphypinyin拼音输入法的移植问题 [复制链接]

上一主题 下一主题
离线qiuyu82
 

只看楼主 倒序阅读 楼主  发表于: 2008-05-26
murphypinyin拼音输入法的移植问题
— 本帖被 XChinux 执行加亮操作(2008-05-27) —
大家好,我现在在研究拼音输入法的移植,碰到以下问题无法解决。

    将下载的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重新编辑 ]
离线shiroki

只看该作者 1楼 发表于: 2008-05-27
个人认为没有你改过的code恐怕没法分析
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线tommyandone
只看该作者 2楼 发表于: 2008-11-02
能不能给我发一个这样的包
快速回复
限100 字节
 
上一个 下一个