qt中esc键会在一些控件中默认的进行一些事件的触发,比如:qdialog,按下esc键窗口消失。大多数情况下,我们不需要这么做,那么就需要对默认事件进行屏蔽。
<a href="#%e7%ae%80%e8%bf%b0">简述</a>
<a href="#%e6%ba%90%e7%a0%81%e5%88%86%e6%9e%90">源码分析</a>
<a href="#%e4%ba%8b%e4%bb%b6%e8%bf%87%e6%bb%a4%e5%99%a8">事件过滤器</a>
<a href="#%e4%ba%8b%e4%bb%b6%e9%87%8d%e5%86%99">事件重写</a>
<a href="#%e9%87%8d%e5%86%99reject">重写reject</a>
通过查看qdialog的源码,我们很容易会发现keypressevent事件中,当按下esc键时,会默认执行reject()。
ok,我们如果想改变esc键的默认动作,则可以通过两种途径:
重写esc键对应的事件
重写reject()
对qdialog使用事件过滤器,过滤esc键。
<code>installeventfilter(new eventfilter(this));</code>
重写qdialog的键盘事件keypressevent。
m_bclosed为关闭的条件,为true时,窗口才会关闭。
关于事件过滤器和事件重写其实是属于一种情况,都是基于事件判断和过滤的,而事件过滤器相对来说更易用、扩展性更好,不需要针对每个控件都去重写对应的事件。
更多参考:
<a href="http://blog.csdn.net/liang19890820/article/details/50352131">qt之密码框不可选中、复制、粘贴、无右键菜单等</a>