QT-事件-定时器、事件过滤器

   widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 

namespace Ui {
class Widget;
}

class Widget :  public QWidget
{
    Q_OBJECT

public :
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    //重写定时器的事件
    void timerEvent(QTimerEvent *);

    int id1;  //定时器1的唯一标示
    int id2;  //定时器2的唯一标示

    //重写事件过滤器的事件
    bool eventFilter(QObject *, QEvent *);

private :
    Ui::Widget *ui;
};

#endif // WIDGET_H

    widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include  //定时器类
#include 
#include 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui( new Ui::Widget)
{
    ui->setupUi( this );

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

    id2 = startTimer(2000);


    //定时器第二种方式
    QTimer * timer =  new QTimer( this );
    //启动定时器
    timer->start(500);

    connect(timer,&QTimer::timeout,[=](){
        static int num = 1;

        //label4 每隔0.5秒+1
        ui->label_4->setText(QString::number(num++));
    });


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




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


}

 // 步骤2  重写 eventfilter事件
bool Widget::eventFilter(QObject * obj , QEvent * e)
{
    if (obj == ui->label)
    {
        if (e->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent * ev  =  static_cast (e);
            QString str = QString(  "事件过滤器中::鼠标按下了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug() << str;
            return true ;  //true代表用户自己处理这个事件,不向下分发
        }
    }

    //其他默认处理
    return QWidget::eventFilter(obj,e);
}

void Widget::timerEvent(QTimerEvent * ev)
{
    if (ev->timerId() == id1)
    {
        static int num = 1;

        //label2 每隔1秒+1
        ui->label_2->setText(  QString::number(num++));
    }

    if (ev->timerId() == id2)
    {
    //label3  每隔2秒 +1
    static int num2 = 1;
    ui->label_3->setText(  QString::number(num2++));
    }

}

Widget::~Widget()
{
    delete ui;
}

 

 

posted @ 2022-04-28 13:11  wuyuan2011woaini  阅读(55)  评论(0编辑  收藏  举报