有一段时间都没有想出自己接下来可以写点什么,要说没工夫写那是给自己找借口了,更多的原因,还是觉得东西学得还不是很彻底,写出来的也显得幼稚和肤浅,反倒会贻笑大方了。然而,真要是按这种心态下去的话,我这也就别指望写点属于自己的东西了,所以还是知道多少写多少,由浅入深。希望一方面能帮到某些用得着的朋友,一方面也能巩固自身所学。
在学习和应用Qt的工作当中,曾经花了很大的力气去解决一个问题——即希望在应用的软件当中,响应键盘的delete键去删除某一选中控件,前提是应用程序中已经存在一个delete按键,即希望两种方式都能实现对所选控件的删除功能。
虽然在毫无头绪的情况下,向师兄请教了此种情况下的解决途径——使用类QWidget中的成员函数setFocus ()或setFocusPolicy( QWidget * w),将焦点设置在使用中的主窗口(active window,即活动窗口)。但是,情况并没有自己想象中的顺利,经过反复的修改、测试、再修改、再测试。最后也没能得到自己想要的结果。之所以这么不顺,不得不说,挫折发生还是有原因的。一方面当时自己对C++中this的使用还很生疏,而恰恰当时就需要用得着;另一方面,并不是对主窗口设置了焦点就能实现相应键盘删除的功能,在此之前还必须先做好另一项前提性的工作。以下说明自己在这个过程中的解决方法。
将focus设置在主窗口,这点并没有错,因为成员函数setFocus()和setFocusPolicy( QWidget * w)本身就是为了使Widget接受键盘输入的焦点。只不过,在此值得说明的是,两个函数的使用方式和实现的功能稍有差异(对此,这里不再赘述,Qt Assistant中有更为详尽的说明)。在实现控件的删除功能相应键盘中delete键,首先要做的是设置好软件中delete按钮的另一种键盘按键快捷方式。这里有两种方式,一是使用函数setAccel ( const QKeySequence & ) ,另一种是在Qt Designer中对所选widget的accel属性设置快捷键,直接在键盘输入即可,如ctr+D。
做完该项工作,可以说就先完成了一个必要的前提工作。接下来,就可以使用setFocus这一成员函数,把焦点设置在主窗口,这样程序就会在主窗口当中去寻找可能的键盘相应事件,否则focus仍然在被选中的部件上,如某一选中的控件,这一点很重要。
那么,是不是这样就可以了呢,答案是否定的,在这个响应事件当中,必须要注意时刻的选取。因为焦点会随着鼠标的点击或其他某种方式而改变,如选中某控件后,并不立即按下delete键删除,继续点击其他选项,这时再按delete的话,并不能实现删除的功能。这样会使系统因为找不到事件的目标而不起作用。就如一辆车在十字路口的时候不选择转弯,等到没有岔路口的时候又要求车转弯一样,已经散失了原有实现的条件。因此,这里必须要注意加入setFocus()语句的位置。程序员可以选择选中控件后的这一时刻,将焦点设置在主窗口,或者在鼠标左键点击某一控件这一事件后,立即运行setFocus()这一语句,从而使焦点在活动窗口上,系统能够在整个窗口内寻找可能要发生的响应键盘输入事件。
说到这,我一直没有再说上面提到的this给我带来的困扰是什么。因为这其实只是对C++还不是很熟悉的朋友而言的,并非整个事件的障碍。在我本人修改和调试程序的过程中,因为还不是很懂得this的使用,虽然知道需要调用setFocus()这一函数,但如何调用,其实现方式却很难达成,属于“巧妇有米无柴也难炊”的状况。后来知道了this的使用后,问题才得以迎刃而解。其实很简单,如果是调用类,且实现删除功能的语句就在活动窗口类当中,这时只需要使用this->setFocus();即可。现在回过头再去看的时候,却又是那么简单。

转载于:https://blog.51cto.com/sunshine1106/299677

响应键盘delete键的删除功能相关推荐

  1. sql delete删除的数据怎么恢复_如何恢复按下Shift + DELETE键永久删除的文件和资料夹?...

    简单删除和Shift+Delete永久删除 想删除电脑上的任何文件,有以下两种方式: ① 按「DELETE」键简单删除文件.在这种模式下,文件被移动到回收站.此时,如果我们想要恢复已删除的文件和资料夹 ...

  2. RK键盘出现上下左右键对应890←输出,Del键输出q,q键有删除功能解决

    问题描述 RK920C键盘出现按Q会执行Del键的功能,按Del键会执行Q键的功能,上下左右键会输出890←数字的问题 问题分析 首先怀疑是硬件出了问题,但是实测发现很多键都绑定或者互换了,所以就怀疑 ...

  3. iOS开发之解决系统数字键盘无文字时delete键无法监听的技巧

    最近在做用户登录获取验证码时添加图形验证码功能,就是只有正确输入图形验证码才能收到后台发送的短信验证码.效果如下: 看起来虽然是个小功能,但是实际操作起来,会发现苹果给我们留下的坑,当然更多的是自己给 ...

  4. Mac使用delete键向后删除字符

    mac和windows区别 在Windows电脑中,有两个键可以实现删除的功能,一个是画着←的BackSpace退格键,一个是Delete键.退格键可以删除光标左边的文字,Delete键可以删除光标右 ...

  5. 苹果电脑Mac中delete键的七种用法

    Windows键盘是有Backspace 和 Delete键的, 虽然苹果电脑Mac只有Delete键,但是这并不影响mac的效率.在macOS下有一些Delete键的组合用法, 灵活运用这些技巧,往 ...

  6. 如何设置长按delete实现连续删除小技巧!

    Mac系统怎么设置长按delete键连续删除?Mac长按delete不能连续删除,不方便,想要长按delete连续删除,该怎么设置呢?下面我们就来看看详细的教程. Windows电脑的退格键和dele ...

  7. insert键与delete键重合了(笔记本)】:如何点击insert?

    delete和insert 两个功能的切换键是 fn+这个按键. Insert键的功能:按一下为"插入"再按一下"取消插入"(在取消插入状态,打一个字,就会将后 ...

  8. 中英文标点符号切换的组合键_最全的键盘各键及组合键功能说明,好好学习

    键盘是最常用的输入设备,通过键盘可以将汉字.英文字母.数字.标点符号等输入到计算机中,从而向计算机发出命令.输入数据.那么键盘分为几个功能区?各键的功能是什么呢?组合键又有什么功能呢?下面就分别予以说 ...

  9. securecrt delete键向后删除

    securecrt 在vt100模式下会delete键和backspace键功能一样,都是删除前面的内容,要调整向后删除需要设置下:会话选项--终端--仿真--终端里选择linux模式即可. 转载于: ...

最新文章

  1. 【Kafka】Kafka-数据倾斜问题-参考资料-解决方案
  2. java如何保证redis设置过期时间的原子性_redis专题系列22 -- 如何优雅的基于redis实现分布式锁
  3. angular5 httpclient的示例实战
  4. 4.1.2(3) 数据交换方式
  5. SpringMVC中跳转路径的问题
  6. [共享]一个文件上传的控件,绝对是精品源码
  7. php读取excel函数,PHP读取Excel函数Spreadsheet_Excel_Reader
  8. 前端学习(2682):重读vue电商网站3之登录页面总结el-form 组件问题
  9. http协议客户端向服务器端请求时一般需要发送的内容
  10. 通过Java得到的时间与操作系统时间不一致,如何修改Java虚拟机时间?
  11. java反射回调函数_java回调函数
  12. %3c php $str1=,ThinkPHP5.0.215.1.* 代码执行和命令执行漏洞利用
  13. maven本地仓库中存在jar包,但编译不成功,显示jar包不存在
  14. 小米手机60帧录屏_小米手机中居然有这么强大投屏录屏功能?!我可能用了个假小米吧...
  15. matlab标准数据,Matlab数据标准化实现
  16. 给初学日语者的几点建议——词汇篇
  17. 粒子群算法(6)-----几个适应度评价函数
  18. 修改Android应用名称
  19. docker安装及加速器
  20. 【FFmpeg 命令】提取音频或视频、提取图片、格式转换等

热门文章

  1. POJ3272 Cow Traffic
  2. Hack Into Linux Packet Schedulers
  3. java线程系列---condition的讲解
  4. docker基础知识之挂载本地目录
  5. 程序员应该知道的七个图形工具
  6. Redis命令——Keys相关
  7. 用py2exe打包后的程序一闪而过
  8. 关系计划笔谈(9-1):泛BOM与虚拟产品
  9. JS中自定义replace可替换特殊符号$等,但无法忽略大小写的函数
  10. JSP显示错误信息中四个范围来保存变量