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软键盘思路,虽然界面做得不好看,但是功能已经出来了,而且界面也可以自己美化,高手求指教!!!

时间: 2024-08-07 04:32:28

QT 做软件盘的相关文章

用Qt写软件系列五:一个安全防护软件的制作(1)

引言 又有许久没有更新了.Qt,我心爱的Qt,为了找工作不得不抛弃一段时间,业余时间来学一学了.本来计划要写一系列关于Qt组件美化的博文,但是写了几篇之后就没坚持下去了.技术上倒是问题不大,主要是时间不够充裕.这段时间写几篇关于界面整体设计的博文,从最基础的界面元素开始,到最后构建一个页面元素丰富的桌面应用程序.Trojan Assessment Platform是一个原型设计项目,只是实现了有限的一部分功能.远远还称不上是一个评估平台.这里仅仅侧重于用Qt做界面的实现. 界面预览 首先还是看看

android 中自定义软件盘用于特需界面的输入

在做p2p理财项目,有些界面避免有校身份证号码及购买数量的输入,所以采取自定义软件盘的方式来实现更好的输入体验. 那么怎么弹出和隐藏自己自定义的软键盘呢?关键代码如下 if (SDK_INT <= 10) { // 屏蔽默认输入法 edText.setInputType(InputType.TYPE_NULL); } else { //反射的方法实现避免弹出系统自带的软键盘 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_

网盘的倒掉是不可避免的,因为做网盘的成本是非常巨大的(国内几大网盘就剩百度云、天翼云、和彩云),中国的独服太贵

作者:冯硕链接:http://www.zhihu.com/question/51803053/answer/127549782来源:知乎著作权归作者所有,转载请联系作者获得授权. 很正常的情况.目前全国所有的网盘商均处于巨亏的状态,撤退是非常正确的选择.我在这个回答下新浪微盘为什么要停止个人免费服务?有什么影响? - 冯硕的回答 就说过这个问题了.网盘的倒掉是不可避免的,因为做网盘的成本是非常巨大的.现在活着的网盘,大家且用且珍惜.当时新浪微盘倒掉的时候,我的确准考虑做网盘方面的业务.当时我不仅

做网盘难啊

做网盘难啊要养一堆客户端研发,界面丑要被骂要养一堆服务端研发,不稳定丢了文件要被骂要养一堆安全人员,泄露隐私要被骂要养一堆机器学习的人做反黄,做得差会被喝茶,做得好会被骂还有带宽费用,限速了也要被骂而且还没什么人愿意付费,做网盘的老板心里苦啊 有些人说你弄到大数据了也赚了,只有你心里知道,狗屁的大数据. 作者:王码修链接:http://www.zhihu.com/question/51803053/answer/127582337来源:知乎著作权归作者所有,转载请联系作者获得授权.

你真的适合做软件开发吗

前段时间一个朋友跟我说,他说做软件开发不仅累,而且从来不跟人接触,整天要对着电脑研究代码.整个人都完全脱离社会了,自己都快变成代码了. 我笑着以一个过来人的身份对他说,你现在后悔了吧?!天下没有后悔的药,若想不后悔,就必须对将来要做的事情有个了解,这就好比商人投资某个项目一样,必须做好深入的考察后,才能进入,否则就凭着一腔热情,失败在所难免. 软件开发行业曾一度被各大媒体报渲染我21世纪的昭阳产业,人才缺口达到多少多少等等.听的大家是蠢蠢欲动,摩拳擦掌恨不得卯足劲冲进去好好干一番事业.然后各种媒

qtday02 qt做简单的加法器和模拟登陆功能

//在3t2目录下 //adder.h /* qt简单加法计算器 */ #ifndef ADDER_H #define ADDER_H #include<QDialog> #include<QLineEdit> #include<QtWidgets/QPushButton> #include<QtWidgets/QLabel> class Adder:public QDialog{ Q_OBJECT//让自定义的槽函数生效 private: QLineEdi

学EE做硬件找工作不如学CS做软件,为什么会这样?

学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇,EE/硬件也是信息技术行业不可缺少的一部分,为啥CS软件工作机会这么多而EE硬件不行? 最主要的原因就是一个字:钱. 一个行业要发展要兴旺,要有资金投入.信息技术行业的发展,并不是靠政府资金驱动的,而是私人投资.投资人当然希望风险尽可能的少.回报尽可能大的快,而且收回成本要尽可能的快. 要做软件开发

自定义dialog样式,自动弹出软件盘

开发中android自带dialog样式有时候不能满足我们的需求,这时候就需要自定义样式了,调用dialog的setView方法可以自定义布局,代码如下 final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); View alertDialogView = View.inflate(context, R.layout.comment_input_layout, null); final Ale

“写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人, 他们写的ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。

ACM的题库的编程都只能算做程序,不能算软件.写程序和做软件区别还是很大的.程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.为实现预期目的而进行操作的一系列语句和指令.而软件是程序以及开发.使用和维护所需要的所有文档的总称,而程序是软件的一部分.软件可能是由一个程序组成,或者由千万个程序组成,程序是软件的一个必不可少的组成. Edsger Dijkstra 曾经提到:“Software engineering, of course,presents itself as an