当前位置:文档之家› Qt输入法设计报告

Qt输入法设计报告

Qt输入法设计报告学院:电气信息工程学院专业:物联网工程班级: 12物联网1 学号: 12****** 姓名:华** 指导教师: *** 设计时间:2014.12.01-2014.12.05摘要:在基于Linux 环境的虚拟机上,使用 Qt Creator ,编写Qt 程序,以代码形式实现软键盘的操作界面,在软件盘上制定数字键、字母键、退出键等按键,使之具备大小写英文字母、数字、基本符号以及中文汉字输入等输入法的基本功能。

编写代码实现按键各项功能后可生成能够在ARM 板上运行的代码,并移植到ARM 板上,实现开发板上触摸式输入的功能。

关键词:Qt Creator 、信号与槽一、程序模块设计(一)程序模块Qt 输入法主工程名为keyboard.pro ,主要包括.h 头文件、.c 源文件和.qrc 资源文件组成,如图1.1所示:图1.1 程序文件程序分为界面设计模块、按键功能定义模块、中文汉字输入显示模块以及非中文字符输入显示模块构成,具体联系如图1.2所示:图1.2 程序模块示意图中文汉字输出模块 非中文字符输出模块按键功能定义 界面设计模块 字符输入模块(二)程序流程图按照以上程序模块功能编写keyboard.cpp 程序,流程图如图1.3所示:图1.3 程序流程图二、各模块程序分析各模块的功能全部由编写“keyboard.cpp ”文件编译实现,具体内容如下:(一)界面设计模块Qt 输入法的设计目的是基于一个软件盘的操作界面,在ARM 板上实现触摸式的输入方式,因此,本模块的主要功能就是定义这个软键盘的大小,设置键盘上的按键个数及大小、布局。

setWindowFlags(Qt::FramelessWindowHint);this->resize(520,350); //设置软键盘大小为520*350; QPalette palette = this->palette();palette.setBrush(QPalette::Background,QBrush(Qt::red));//设置键盘底色为红色;同时,在此模块中定义键盘上用于表示汉字输入框、字符输出框、字母键、关闭键盘 开始设置软键盘及按键大小、布局 选择输入模式 点击了“cancel ”? Y 模式为CN? 调用字库,汉字候选框出现汉Y 点击所需汉字选择字符按键 N 输出框中显示所选字符/汉字N符号键、汉字候选框键、左移键、右移键、删除键、模式切换键、模式标志键、大小写切换键、关闭键、确定键、空格键等共计45个控件的类和具体位置、大小。

定义完成后界面如图2.1所示:图2.1键盘界面(二)按键功能定义模块1.基本功能键基本功能键包括左移键、右移键、汉字候选框0~7、删除键、模式切换键、模式标志键、大小写切换键、关闭键、确定键、空格键。

此模块首先要完成的任务是为各功能按键上显示相应功能的名称,程序如下:m_leftBtn ->setText("<"); //左移按键上显示<m_rightBtn ->setText(">"); //右移按键上显示>m_capsBtn ->setText("Caps");//大小写切换键上显示Capsm_deleteBtn ->setText("<--");//删除键上显示<--m_signBtn ->setText("CN");//模式标志键上初始状态显示CN(默认汉字输入) m_changeBtn ->setText("change");//模式切换键上显示changem_spaceBtn ->setText("space");//空格键上显示spacem_sureBtn ->setText("sure");//确定键上显示surem_cancelBtn ->setText("cancel");//关闭键上显示cancel汉字候选框键上面默认不显示字符。

接下来,为每个按键定义功能,以左移按键为例:void Widget::leftFun(){m_selectFlag --;if(m_selectFlag<1)m_selectFlag =1;showHanzi();}//点击左移时,8个汉字候选框每8个一组地显示候选汉字。

同理,编写程序实现每一个基本功能键的功能。

2.字符按键功能字符按键需要在中文、大写英文、小写英文、数字符号这四种模式下显示不同的字母或符号,以显示字母“q”的按键为例:void Widget::setName_EN(){ m_QBtn ->setText("Q");}//大写模式下,此按键显示Qvoid Widget::setName_en(){ m_QBtn ->setText("q");}//小写模式或中文输入模式下,此按键显示q void Widget::setName_sn(){ m_QBtn ->setText("1");}//数字模式下,此按键显示1同理设置所有字符按键上面显示的内容。

接下来为每一个字符按键定义功能,同样以显示字母q的按键为例:void Widget::qFun(){ switch(m_stateFlag){case 0:m_spellEdit->insert("q");break;//中文模式下将“q”送入拼写框 case 1:if(m_capsFlag)m_hanziEdit->insert("Q");//大写模式下将“Q”送入输出框 elsem_hanziEdit->insert("q");//小写模式下将“q”送入输出框 break;case 2:m_hanziEdit->insert("1");//数字模式下,将“1”送入输出框 default:break; }}同理编写程序为每一个字符按键实现此类功能。

3.信号与槽的应用对每个按键进行了以上功能的定义之后,要采用信号与槽连接的程序,实现在点击按键这个事件发生时使按键完成相应的功能,同样以显示字母q的按键为例:connect(m_QBtn,SIGNAL(clicked()),this,SLOT(qFun()));如此,便可实现点击按键Q时,根据不同的输入模式在输出框或汉字拼写框中显示相应的字符。

同样的,对每一个按键进行信号与槽的连接,便可使软键盘正常工作。

(三)中文汉字输出模块非中文状态下的字符输出以上已经提及,此处不再重复。

中文汉字的输出是建立在调用中文字库的前提上的,本程序使用的中文字库是“GB18030”,首先将中文字库写入“zk.txt”文件保存在工程文件的根目录中,其次在工程文件下建立一个虚拟目录“zk”,通过“zk.qrc”文件实现“keyboard.cpp”文件对字库的调用,进行读取并在软键盘上显示汉字。

扼要的程序实现如下:m_file = new QFile(":/zk.txt");m_in = new QTextStream(m_file);if(!m_file->open(QIODevice::ReadOnly | QIODevice::Text)){qDebug() << "can't open this zk.txt!!";return;}//在程序中读取zk.txt中的文字,并使指针指向字库的首个字符。

字库文件读取成功后,当程序处于中文汉字输入模式下时,根据所输入的字符读取zk.txt第一列的值,使指针指向zk.txt中与输入拼音相同的那一行,并通过左移、右移键的功能,将这一行的中文汉字8个一组地显示在汉字候选框内,通过点击即可将用户想要的中文汉字送进输出框,程序实现如下:stringLine = m_in -> readLine();stringLine = strlist[1];m_storeHanziStr = stringLine;m_storeCount = stringLine.count();//使指针指向字库中与输入拼音相同的那行的第一个汉字,同时统计出本行汉字总数if(m_storeCount>=m_selectFlag*8){m_ziBtn0 ->setText(m_storeHanziStr.at(m_selectFlag*8-8));m_ziBtn1 ->setText(m_storeHanziStr.at(m_selectFlag*8-7));m_ziBtn2 ->setText(m_storeHanziStr.at(m_selectFlag*8-6));m_ziBtn3 ->setText(m_storeHanziStr.at(m_selectFlag*8-5));m_ziBtn4 ->setText(m_storeHanziStr.at(m_selectFlag*8-4));m_ziBtn5 ->setText(m_storeHanziStr.at(m_selectFlag*8-3));m_ziBtn6 ->setText(m_storeHanziStr.at(m_selectFlag*8-2));m_ziBtn7 ->setText(m_storeHanziStr.at(m_selectFlag*8-1));}//如果当前行的汉字数>=8的整数倍从指针当前所指字起的8个字显示到汉字候选框中,然后通过左移右移,8个一组地依次显示字库中的汉字else{int extraNum = m_selectFlag*8 - m_storeCount;switch(extraNum){Case0:……;break;Case1:……;break;Case2:……;break;Case3:……;break;Case4:……;break;Case5:……;break;Case6:……;break;Case7:……;break;}//如果当前行汉字数<8,计算得比8小extraNum,只要将汉字显示到汉字候选框的前(8-extraNum)上即可。

然后通过点击汉字候选框,其信号与槽的连接关系便可将相应的中文汉字送进输出框,实现输入法的中文输入功能。

相关主题