最近做一个小项目发现自定义的一些控件需要有特殊的要求,但是Qt的信号与槽中间又没有定义需要的信号,所以就需要自定义控件,重构它的一些事件处理器使其达到我们的需求
Qt中事件处理的方式,最常用的就是使用事件处理器(event handler)和事件过滤器(event filter)这两种方法。但是我看网上很多都是照搬书上的原话来解释的,实在是很难理解,所以特此记录一下自己的理解。
一:事件处理器
QT中其实为每一种常见的事件类型都提供了相应的事件处理器。当我们要自定义控件一些需求的时候就可以捕获某种类型的事件并进行处理,只需要在定义的控件中重写这些事件处理器就好。常见的事件类型和对应的事件处理器如下所示:
QEvent::None - 不是一个事件。
QEvent::Accessibility - 可存取性信息被请求。
QEvent::Timer - 规则的定时器事件,QTimerEvent。
QEvent::MouseButtonPress - 鼠标按下,QMouseEvent。
QEvent::MouseButtonRelease - 鼠标抬起,QMouseEvent。
QEvent::MouseButtonDblClick - 鼠标再次按下,a href=“qmouseevent.html”>QMouseEvent。
QEvent::MouseMove - 鼠标移动,QMouseEvent。
QEvent::KeyPress - 键按下(举例,包括Shift)QKeyEvent。
QEvent::KeyRelease - 键抬起,QKeyEvent。
QEvent::IMStart - 输入法写作开始。
QEvent::IMCompose - 发生输入法写作。
QEvent::IMEnd - 输入法写作结束。
QEvent::FocusIn - 窗口部件获得键盘焦点,QFocusEvent。
QEvent::FocusOut - 窗口部件失去键盘焦点,QFocusEvent。
QEvent::Enter - 鼠标进入窗口部件边缘。
QEvent::Leave - 鼠标离开窗口部件边缘。
QEvent::Paint - 屏幕更新所需要的,QPaintEvent。
QEvent::Move - 窗口部件位置改变了,QMoveEvent。
QEvent::Resize - 窗口部件大小改变了,QResizeEvent。
QEvent::Show - 窗口部件被显示到屏幕上,QShowEvent。
QEvent::Hide - 窗口部件被隐藏,QHideEvent。
QEvent::ShowToParent - 一个子窗口部件被显示。
QEvent::HideToParent - 一个子窗口部件被隐藏。
QEvent::Close - 窗口部件被关闭(永久性地) QCloseEvent。
QEvent::ShowNormal - 窗口部件应该按通常模式显示。
QEvent::ShowMaximized - 窗口部件应该按最大化模式显示。
QEvent::ShowMinimized - 窗口部件应该按最小化模式显示。
QEvent::ShowFullScreen - 窗口部件应该按全屏模式显示。
QEvent::S