QT 做软件盘
最近搞了一个组织细胞脱水机项目,当然,对于国内的项目都是仿来仿去的,我们也不例外,开启被仿机器后,第一个看到的界面就是用户登录界面,需要输入中文,作为一个程序员,我的第一反应就是我需要采用什么用的框架来做这个界面,方向是多方面的,肯定会选择自己熟悉的一个,自然而然,我选择了QT来做界面,但是QT并没有像安卓,iOS,C#等支持得那么完美,毕竟做的人不是那么多,所以相对不是那么完美。我们没有鼠标键盘这样的外设,所有的用户交互都是通过触摸显示屏。这里碰到的第一个问题就是:QT软键盘制作。下面进入正题,我是怎么解决这个问题的。
第一阶段----找到syszuxpinyin源码
与大部分人一样,碰到一个问题不会解决,先问一下百度大神怎么看,网上搜QT软键盘,有各种各样的解决方法,有些我也下载运行了,不是很好用,有些还需要钱,对于要钱的,可以理解,但是我觉得没必要。最后我选择了一个非常接近的嵌入式QT软键盘思路,syszuxpinyin点击打开链接,将源码下载后,按照指定的方法移植,在arm板子上运行,发现有两个问题;
第一:QLineEdit中的内容总是append在后面;第二:不能重复点击某个控件;
第二阶段----修改syszuxpinyin源码
带着前面两个问题,我又百度,找到了另外一个博客点击打开链接,按照其中一个的方法修改了,但是发现又有一个问题,只要点击软键盘返回按钮,程序就死在那里了,最终经过排查,程序问题出在一个语句current_focus_widget = QApplication::focusWidget();后来和群里的朋友聊聊天才知道,在嵌入式QT版本里,用这样的方法获取焦点是有bug的。
第三阶段----详细分析syszuxpinyin源码
既然没有找到完全匹配的方法,而且又研究了这么久的syszuxpinyin后,决定将syszuxpinyin的源代码吃透,看有没有更多的收获
做了注释的syszuxpinyin代码如下地址:http://pan.baidu.com/s/1i56lUiL
分析syszupinyin架构:
syszupinyin的架构由两部分组成
第一部分:软键盘界面,获取用户输入的字符串,来匹配字库中的汉字或者显示英文,显示在QLineEdit中,点击返回的时候,将汉字或英文发送出去。
第二部分:QWSInputMethod的子类
第二部分中,由于界面焦点获取的问题即QApplication::focusWidget()出现bug,自动获取焦点失败。那么既然获取焦点失败,那么控件成为焦点的时候,可以自己把自己说出来,转换成编程方法就是重写控件的mousePressEvent方法。
第四阶段----实现嵌入式QT软键盘
根据syszuxpinyin软键盘界面代码和重写输入控件的mousePressEvent方法来实现嵌入式QT软键盘,其实不只是嵌入式版本可以使用,PC机版本也可以使用。
思路:
1 重写输入控件的mousePressEvent方法,在mousePressEvent方法中发射信号,并且将字符串发送出去,主窗口接收到信号后,打开相应的槽函数,在槽函数中打开软键盘界面,并且将信号发送过来的字符串显示在软键盘界面中。
2 打开软键盘后,可以在界面上可以选择中英文输入法,如果是英文输入法,则直接显示出来,如果是中文输入法,则根据输入的英文字符来匹配字库中的字段,然后显示出来
3 点击软键盘返回按键,则发送信号,将字符串(英文或中文)发送给主窗口的输入组件并显示。
如果感觉有帮助到,麻烦点个赞!!!
源码地址下载:http://pan.baidu.com/s/1nvcrBfj
运行效果图片:
中文输入
英文输入
以上是我的QT软键盘思路,虽然界面做得不好看,但是功能已经出来了,而且界面也可以自己美化,高手求指教!!!
QT 做软件盘的更多相关文章
- 用Qt写软件系列三:一个简单的系统工具(上)
导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...
- 用Qt写软件系列五:一个安全防护软件的制作(1)
引言 又有许久没有更新了.Qt,我心爱的Qt,为了找工作不得不抛弃一段时间,业余时间来学一学了.本来计划要写一系列关于Qt组件美化的博文,但是写了几篇之后就没坚持下去了.技术上倒是问题不大,主要是时间 ...
- 第一章-第四题(ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么?软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?这个游戏团队, 有很好的软件,但是商业模式和其他软件之外的因素呢?有没有考虑到)--By梁旭晖
引用 http://baike.baidu.com/link?url=z_phkcEO4_HjFG_Lt163dGFAubdb68IbfcfzWscTOrrZ55WbJEQKzyMQ5eMQKyatD ...
- Qt做动画旋转旋转图片
今天看到百度首页的音乐播放有个图片可以旋转,感觉很酷就用qt做了一个类似的,关键时刻还是要发挥数学功底,静下心来,写一写,画一画,编程对数学分析能力要求还是不小的,以后要经常锻炼数学分析能力啊! Wi ...
- 4.“写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人, 他们写的ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。
ACM的题库的编程都只能算做程序,不能算软件.写程序和做软件区别还是很大的.程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.为实现预期目的而进行操作的一系列语句和指令.而软件是程 ...
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- UltraISO做U盘启动盘教程
用UltraISO做U盘启动盘教程 注意:制作前请先备份u盘内重要文件 vista.win7系统需要以管理员身份运行UltraISO,其他系统直接运行即可 1.打开UltraISO选择iso镜像文件 ...
- Android软件盘InputMethodManager
调用下面代码:(第一次调用显示,再次调用则隐藏,如此反复),this指activity InputMethodManager imm = (InputMethodManager)this.getSys ...
- ios 底部用定位 fixed。在软件盘出来后,页面元素被顶上去一部分,fixed定位的footer也跑到了上面去。解决方法
ios 底部用定位 fixed.在软件盘出来后,页面元素被顶上去一部分,fixed定位的footer也跑到了上面去.解决方法 $("input").focus(function() ...
随机推荐
- Windows DOS 窗口设置字体颜色
2015-04-21 10:54:43 #include <windows.h> #include <iostream> using namespace std; #defin ...
- 三层架构 与 MVC那点事儿
以下为转载内容: 地址 MVC与三层架构的异同点 首先先解释一下MVC. V即View.是视图的意思. C即Controler.是控制器的意思. M即Model,是模型的意思. 这三个里.最不容易理解 ...
- MATLAB地图工具箱学习总结(三)地图工具箱的基本知识
MATLAB地图工具箱学习总结(三)地图工具箱的基本知识 今天想要介绍的是一些比较基础的函数.了解了这些函数,地图投影的基本概念才能真正明白.而要想继续研究MATLAB中有关地图投影的函数,尤其是未来 ...
- [SAP ABAP开发技术总结]选择屏幕——各种屏幕元素演示
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Ajax --- 数据请求
下面主要介绍(JS原生)数据请求的主要步骤: Ajax 数据请求步骤: 1.创建XMLHttpRequest对象 2.准备数据发送 3.执行发送 4.指定回掉函数 第一步:创建XMLHttpReque ...
- python成长之路【第十一篇】:网络编程之线程threading模块
一.threading模块介绍 threading 模块建立在 _thread 模块之上.thread 模块以低级.原始的方式来处理和控制线程,而 threading 模块通过对 thread 进行二 ...
- win7配置ftp服务
1.首先开启ftp服务 2.配置ftp站点 3.让ftp服务器通过防火墙 4.编辑ftp访问权限,使用户能通过账号密码访问ftp,当然,在此之前,需要创建一个新的用户 到此,就可以远程访问ftp了
- hdu 5676 ztr loves lucky numbers
题目链接:hdu 5676 一开始看题还以为和数位dp相关的,后来才发现是搜索题,我手算了下,所有的super lucky number(也就是只含数字4, 7且4, 7的数量相等的数)加起来也不过几 ...
- 导出excel用ajax不行,提交form表单可以
导出excel用ajax不行,提交form表单可以. 一直用ajax找原因,网页不出现下载提示框 写了 response.setContentType("application/binary ...
- MVC项目中使用js 设置Checkbox的选中事件
要实现的效果是,当点击checkbox时,跳转到Action中 CheckBox实例: View界面: @Html.CheckBox("prd.IsChecked", Model. ...