Qt学习基础1.9

mac2024-10-27  10

一、定时器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函数 

 

 

 

 

 

最新回复(0)