Qt 事件的产生与处理
Qt 事件的产生与处理
事件的类型
键盘事件 鼠标事件 鼠标双击事件 鼠标移动事件 绘画paintEvent事件等
事件的产生
从程序的启动,进入QApplication::exec(),便进入了事件的循环。操作系统将产生的事件加入到消息队列中,Qt 的事件循环不断地从系统的消息队列中取出消息,将消息生成 Qevent 事件,然后将 Qevent 派送到相应的Qwidget 窗体中进行处理。QWidget 将接受到相应的消息放进 event 函数里进行处理。event 里是按事件类型进行分发处理的,例如KeyPressEvent()、mouseMoveEvent()等。
简化流程:
A. Qt 将事件送到 QWidget B. QWidget 将事件送到 Qvent C. QEvent 按事件类型进行分发 D. 在事件类型里发送信号 E. 相应对象的信号接受
事件的处理
(1)重写特定的消息事件
最常见的事件处理办法就是重写paintEvent()事件,实现样式的重绘等。
(2)重写 Event() 事件
要将某一事件处理在 系统之前,可以重写event 事件,将事件的处理写在系统处理之前。例如键盘事件,可将键盘事件的处理 拦截在 keyPressEvent() 之前。注意处理完事件一定要 return true,否否则Qwidget 默认事件没有处理,会将消息事件继续递归分发,直至被处理返回ture.
(3)安装过滤器过滤事件
首先要对对象例如QPushbutton 安装installEventFilter( const QOject *obj ), rn然后在 obj 的EventFliter 进行处理:
bool eventFilter(QObject* obj, QEvent* evt)
{
if( (obj == &m_edit) && (evt->type() == StringEvent::TYPE) )
{
return true;
}
return QWidget::eventFilter(obj, evt);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本