06-QT事件学习

本文介绍了QT中的事件处理,包括如何重写QLabel事件,如QMouseEvent,以及如何设置事件过滤器和分发器。此外,还探讨了定时器事件的实现方式以及绘图事件和绘图设备的应用。通过实例展示了如何利用QT的特性进行事件响应和图形操作。
摘要由CSDN通过智能技术生成

QT中的所有事件都是基于QEvent的。例如:QMouseEvent继承自QInputEvent,QInputEvent继承自QEvent。

一. 重写QT事件

1. 以Label做示范,在帮助手册中查询QLabel,搜索event,找到Label带有的事件,我们可以自定义Label然后重写这些事件。
2. 创建myLabel类,随意继承一个父类,然后在代码中将父类改为QLabel(此时要改三个位置:1. 导入的头文件; 2. 继承的父类; 3. cpp中的父类构造)。
3. 在ui中,右键点击Label,将其提升为我们自己的Label(先点击添加,后点击提升),之后就会看到右侧label对象所对应的类更改为myLabel。
4. 为了使Label显示得更直观,我们可以将QFrame中的frameShape从NoShape做修改,可以改为Box等。
5. 在mylabel.h里重写5个事件,并且在mylabel.cpp中实现,事件触发后打印到控制台。
6. QMouseEvent提供了鼠标在窗体内的x、y坐标以及全局的x、y坐标。
7. 可以通过ev->button()来判断按键;可以使用“==”也可以使用“&”;ev->button()可以返回组合件信息。

    //鼠标进入
    void enterEvent(QEvent *event);
    //鼠标离开
    void leaveEvent(QEvent *event);
    //鼠标按下
    void mousePressEvent(QMouseEvent *ev);
    //鼠标松开
    void mouseReleaseEvent(QMouseEvent *ev);
    //鼠标移动
    void mouseMoveEvent(QMouseEvent *ev);
//鼠标进入
void myLabel::enterEvent(QEvent *) {
    qDebug() << "鼠标进入";
}

//鼠标离开
void myLabel::leaveEvent(QEvent *) {
    qDebug() << "鼠标离开";
}

//鼠标按下
void myLabel::mousePressEvent(QMouseEvent *ev) {
    qDebug() << "鼠标按下";
    if (Qt::LeftButton & ev->button())
        qDebug() << QString("x = %1, y = %2, global_x = %3, global_y = %4")
                    .arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
}

//鼠标松开
void myLabel::mouseReleaseEvent(QMouseEvent *ev) {
    qDebug() << "鼠标松开";
    if (Qt::LeftButton == ev->button())
        qDebug() << QString("x = %1, y = %2, global_x = %3, global_y = %4")
                    .arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
}

//鼠标移动
void myLabel::mouseMoveEvent(QMouseEvent *ev) {
    qDebug() << "鼠标移动";
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值