一、定时器1
1、利用事件
//重写定时器的事件
void timerEvent(QTimerEvent *e);
2、启动定时器
startTimer(1000);//毫秒单位
3、timerEvent 的返回值是定时器的唯一标识 可以和e->timerId做比较
二、定时器2
1、利用定时器类 QTimer
2、创建定时器对象QTimer *timer = new QTimer(this);
3、启动定时器 timer->start(毫秒)
4、每隔一定毫秒,发送信号 timeout,进行监听
5、暂停 timer->stop
三、event事件分发器
用途:用于事件的分发,也可以做拦截操作,不建议
bool event(QEvent *e);
返回值 如果是true代表用户处理这个事件,不向下分发了
e->type() == 鼠标按下
#include "mylabel.h"
#include <QDebug>
#include <QString>
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
//设置鼠标追踪
setMouseTracking(true);
}
void MyLabel::enterEvent(QEvent *)
{
//qDebug() <<"鼠标进入了";
}
void MyLabel::leaveEvent(QEvent *)
{
//qDebug() <<"鼠标离开了";
}
void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
qDebug() <<"鼠标移动了";
//qDebug() <<ev->pos();
}
//鼠标释放事件
void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{
//判断组合按键,判断左右键时,结合& 操作符
if(ev->buttons() & Qt::LeftButton)
{
qDebug() <<"鼠标释放了";
}
}
//鼠标按下
void MyLabel::mousePressEvent(QMouseEvent *ev)
{
//当左键按下 提示信息(x,y坐标)
//判断左右按键
if(ev->button() == Qt::LeftButton)
{
//格式化字符串
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;
}
//qDebug() <<"鼠标按下了";
}
bool MyLabel::event(QEvent *e)
{
//如果是鼠标按下,在event事件分发种做拦截操作
if(e->type() == QEvent::MouseButtonPress)
{
QMouseEvent *ev =static_cast<QMouseEvent *>(e);
QString str = QString("event鼠标按下了 "
"x=%1 y=%2 globalX=%3 globaly=%4 ").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug() <<str;
return true;//代表用户自己处理事件,不向下分发
}
//其他事件交给父类处理 默认处理
return QLabel::event(e);
}
四、事件过滤器
在程序将时间分发到事件分发器前,可以利用过滤器做拦截
步骤:
1、给控件安装事件过滤器
2、重写eventFilter函数