QT的消息机制

好比鼠标点击消息:QApplication先获取消息--->具体应该处理的窗口::event()---> event()根据消息类型来调用具体的虚函数函数

1)能够重载具体的虚函数,来实现对消息的响应
 2)能够重载event函数,用来处理或者截取消息。可是重写玩event以后,要把事件从新传递给具体应该处理的窗口,而后这个窗口又传递给QApplication。例如:this

#include <QEvent>
bool Widget::event(QEvent *event)
{
    return QWidget::event(event);
}

event至关于一个开关,能够在这个开关里面关闭某个消息机制:好比若是检测到鼠标左键按下时,直接返回。code

#include <QEvent>
bool Widget::event(QEvent *event)
{
    if(ev->type() == QEvent::MouseButtonPress)
          return true;
    return QWidget::event(event);
}

二、重写具体的虚函数以实现对事件的处理,好比鼠标按下事件:事件

#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;
    }
}

鼠标移动事件:get

//构造函数中添加:
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的it

相关文章
相关标签/搜索