跟着对嵌入式体系体积小型化和操作人性化的要求,以及大尺度触摸式显示屏的广泛应用,在嵌入式体系中选用软键盘完结字符的输入,现已成为现在的开展干流。QT是一个跨渠道的C++图形界面库,是由挪威TrollTech公司推出的产品。它选用的是面向方针的程序规划思维,因而,具有杰出的可扩展性和可移植性,一起支撑多个GUI渠道的交互开发。QT选用了杰出的封装机制,使得它的模块化程度十分高,可重用性好,开发便当。凭仗其杰出的功用,QT已成为现在GUI开发中运用最为广泛的图形界面库之一。QT/E(QT/Embedded)是用于嵌入式体系的QT版别。QT/E去掉了对XLib的依靠而直接作业于Frame Buffer上,因而功率更高,文中首要运用QT4.5.3版别,在嵌入式Linux环境下完结软键盘规划。
1 QT/E体系结构
QT/E是2001年Trolltech公司开发的一款面向嵌入式体系的QT版别。它选用轻量级窗口体系,彻底摒弃了底层的XLib,以Framebuffer作为底层图形接口,极大地减少了对内存的耗费。QT/E在上层依然保持着本来的QT架构,因而,针对在Xwindow上规划的QT程序依然具有很好的移植性。QT/E的根本体系结构如图1所示。
1)QT/E体系结构中的图形引擎是经过相关的图形算法和Framebuffer操作底层的硬件设备来完结的;工作驱动则是经过底层的输入输出设备驱动来完结对外界工作的呼应。
2)如图1所示,由图形引擎层完结对图形界面的绘图操作,然后由QT根本类供给对外界的操作接口。其间,图形类供给图形操作接口,比方:画线、画矩形等;控件类经过承继公共抽象类QWidget来完结根本的控件,为外界供给接口。
2 QT/E通讯机制
在图形界面编程时,咱们常常要完结界面之间的彼此切换或许彼此告诉,更详细的来说便是需求完结类与类之间的彼此通讯。比方,在软键盘的规划中,当一个工作发生时,体系就会宣布一个信号。信号和槽(Signal&slot)机制是QT的中心特征,在QT库中有许多现已设置好的信号,比方:clicked()、triggered()等,开发人员也能够依据需求来自界说某些信号。工作的呼应对应着QT窗口里的槽函数,和信号相似,体系有许多预界说的槽,比方exit()、quit()等,用户也能够依据需求来增加自己的槽函数。
当方针改动其状况时,信号就由该方针发射(emit)出去,这便是方针所要做的悉数工作,它不知道另一端是谁在接纳这个信号。这便是真实的信息封装,它保证方针被当作一个真实的软件组件来运用。槽用于接纳信号,但它们是一般的方针成员函数。一个槽并不知道是否有任何信号与自己相衔接。并且,方针并不了解详细的通讯机制。能够将许多信号与单个槽进行衔接,也能够将单个信号与许多槽进行衔接,甚至于将一个信号与别的一个信号相衔接也是或许的。
因而,整个QT窗口的规划简略、灵敏且扩展性好。信号与槽之间的链接一般用connect()函数来完结,详细相关方法和完结函数如图2所示:
3 依据QT/E软键盘的完结
文中首要依据项目的实践需求,在软键盘上拟定了数字键、字母键、退出键和确认键。详细分两步完结,第一步:在依据linux环境的PC机上拟定软键盘,并编写代码完结其按键功用;第二步:生成能够在ARM板上运转的代码,并移植到ARM板上。
3.1 PC机x11环境下拟定软键盘的模型
依据项目的实践需求,在PC机x11/QT环境下规划了软键盘界面,该软键盘具有数字键、字母键、退出键和确认键,一共42个按键,如图3所示。在linux环境的QT designer下,创立新的widget,然后依据项目中所需求的按键个数来确认软键盘的巨细,在此,挑选软键盘的外框巨细为:540×160。软键盘外框树立完结之后,需求在软键盘区域内参加实践所需求的按键。将Widget Box下Buttons选项中的PushButton按键拖入到软键盘区域内,在PushButton按键特点的文本修正中填入按键值,比方“1”。在PushButton按键特点的姓名修正中填入按键名,比方“n1”。
同理,在软键盘区域内拖入实践所需求按键个数的按键,依据所需求的键值修正每个按键上面的文本特点和姓名特点。依照一般键盘的布局对它们进行摆放
3.2 软键盘完结
如图3所示,首要树立了足项目要求的软键盘的根本模型,接下来要完结的便是当按键呼应时能够读出键盘值并将其发送出去,详细完结的流程如图4所示。
图4中,初始化按键时,能够运用QSignalMapper类来绑缚不同按键所发送的一系列无参数信号,并将其转发为有参数的信号:
QSignalMapper*mapper=new QSignalMapper(this);
QSignalMapper的首要应用为能够完结一个函数呼应不同按钮的功用,下面举例来说明图4的详细完结进程:
首要设置软键盘界面称号为ui,然后以数字键“1”为例:将在图3中数字键1对应的按键称号设为:n1,在图4中的第(1)步中,树立键值“1”所对应的映射,代码如下:
mapper-》setMapping(ui.n1,“1”);
接着,在图4中的第(2)步,需求树立键值clicked对应的信号与槽之间的联系代码如下:
connect(ui.n1,SIGNAL(clicked()),mapper,SLOT(map()));
最终,将所需求用到的字母或许数字经过上述方法衔接到槽函数中。如图4中的(3),将这些所要求得到的字母或许数字发送给焦点控件,代码如下:
connect(mapper,signal(mapped(const QString&)),im,slot(sendcontent(const QStling&)))
上面句子中sendcontent()函数为发射子函数,详细代码如下:
sendCommitString(content); (1)
content.clear(); (2)
句子(1)将焦点控件内的字母和数字发送出去,句子(2)铲除发送框中的字母和数字,供下一次运用。
能够选用相同的方法,对软键盘中其它的按键进行映射函数和衔接函数的编写,然后在arm-linux-gcc环境下编译,生成能够在arm板上运转的二进制文件。
3.3 下载到方针板上运转
本文的规划思路是:先将程序代码在PC机上调试经过,然后将调试经过的程序代码在RAM-linux-gcc环境下进行编译,生成能够在RAM板上运转的二进制文件,最终将此二进制文件下载到方针板中。本文的条件是QT4.5.3环境现已移植到开发板上,详细移植过程在这里不作介绍。在终端上面,运转发动软键盘指令,命令行后边加上“-qws”指令,运转成果如图5所示。
图5是在实践项目中需求的预设手机号码的界面,在体系运转前要先设置手机号码,以便体系故障时能够主动的给对应的手机用户发送预警信息,运用户能够实时的了解自己体系的运转状况。在该界面中,预备预设手机号码时,直接挑选翻开软键盘按钮,图3所示的预制的软键盘会弹出界面,挑选要求预设的手机号码值,完结之后挑选exit按键,软键盘封闭。在此就能够用图5所示的软键盘完结手机号码的预设。
4 结束语
跟着Linux操作体系的广泛应用以及人们对GUI人机交互界面的更多需求,本文在linux操作体系的QT开发套件下,剖析了软键盘完结的原理,并完结了软键盘的规划。此软件盘能够依据用户的要求来增加按键,与外部接入实体键盘比较,不只便当,还节省本钱。经过实践证明此软键盘具有较强的实时性和可靠性,能够广泛的应用于各种QT界面中。