Qt学习-8 <event事件分发器&事件过滤器>

——  均为自学笔记,如有错误请指正


注: 上图是  bool event(QEvent * ev)

可以在事件分发做一个事件拦截  (通常不会这样做)

1. 事件分发器 拦截
  • 声明   <X.h>

//通过event事件分发器 拦截 鼠标按下事件
bool  event(QEvent * e);
  • 定义   <X.cpp>
//通过event事件分发器 拦截 鼠标按下事件
bool  myLabel::event(QEvent * e)
{
    //如果是鼠标按下,在event事件分发中做拦截操作
    if(e->type() == QEvent::MouseButtonPress)
    {
        //C++中的类型转换    将下面的父类转为子类
        QMouseEvent * ev =static_cast<QMouseEvent *>(e);
        QString str = QString("in Event Press:  x=%1  y=%2 globalX=%3  globalX=%4 ").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug() << str ;

        return true;   //true代表用户处理这个事件,不想下分发
    }

    //其他事件交给父类默认处理
    return  QLabel::event(e);


}
 2. 事件过滤器  (了解)

  • 声明
    //重写事件过滤器的事件
   bool  eventFilter(QObject *,QEvent *);
  • 定义实现
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //启动定时器
    id1 = startTimer( 1000); //参数1:间隔,单位:ms

    id2 = startTimer( 2000);//单位:ms

    //定时器第二种方式
    QTimer * timer = new QTimer(this);
    //启动定时器
    timer->start(500); //单位:ms
    connect(timer,&QTimer::timeout,[=](){
        //label_4每隔0.5秒 +1
        static int num4 = 1 ;
        ui->label_4->setText( QString::number(num4++));

    });

    //点击暂停按钮,实现停止定时器
    connect(ui->btn,&QPushButton::clicked,[=](){
        timer->stop();
    });










    //给label 1 安装事件过滤器
        //步骤1 安装事件过滤器
    ui->label->installEventFilter(this);
        //步骤2 重写 eventfilter事件

}
    //步骤2 重写 eventfilter事件
bool  Widget::eventFilter(QObject * obj ,QEvent * e)
{
    if(obj == ui->label)
    {
        if(e->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent * ev =static_cast<QMouseEvent *>(e);
            QString str = QString("in eventfilter Press:  x=%1  y=%2 globalX=%3  globalX=%4 ").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug() << str ;

            return true;   //true代表用户处理这个事件,不想下分发
        }
    }
    //其他默认处理
    return QWidget::eventFilter(obj,e);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值