天天看点

QDialog之屏蔽Esc键简述源码分析事件过滤器事件重写重写reject

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>

继续阅读