QT的消息机制
时间: 2018-09-05来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
比如鼠标点击消息:QApplication先获取消息--->具体应该处理的窗口::event()---> event()根据消息类型来调用具体的虚函数
1)可以重载具体的虚函数,来实现对消息的响应
2)可以重载event函数,用来处理或者截取消息。但是重写玩event之后,要把事件重新传递给具体应该处理的窗口,然后这个窗口又传递给QApplication。例如: #include <QEvent> bool Widget::event(QEvent *event) { return QWidget::event(event); }
event相当于一个开关,可以在这个开关里面关闭某个消息机制:比如如果检测到鼠标左键按下时,直接返回。 #include <QEvent> bool Widget::event(QEvent *event) { if(ev->type() == QEvent::MouseButtonPress) return true; return QWidget::event(event); }
2、重写具体的虚函数以实现对事件的处理,比如鼠标按下事件: #include <QMouseEvent> #include <QDebug> void Widget::mousePressEvent(QMouseEvent *event) { QPoint pt = event->pos(); //获取鼠标按下的位置 qDebug() << pt; if(ev->button() == Qt::LeftButton) { if(ev->modifiers() == Qt::ControlModifier) { // handle with Control; return; } // handle2 without control; } }
鼠标移动事件: //构造函数中添加: this->setMouseTracking(true); //不需要按下只要鼠标在widget上移动就能感应 //如果不将setMouseTracking设置为true,那么只有shu鼠标按下并且移动才能有mouseMoveEvent事件发生 void Widget::mouseMoveEvent(QMouseEvent *) { static int i=0; qDebug() << "mouse move"<< i++; }
鼠标事件默认情况下只能由一个窗口处理,比如如果在widget上放置了一个按钮,当鼠标在按钮上移动时,mouseMoveEvent不能感应,应为mouseMoveEvent是Widget的,不是Button的

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行