QT的消息机制

比如鼠标点击消息: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的

转载于:https://my.oschina.net/u/3919756/blog/1944643

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值