• Qt的事件


    一、鼠标按下事件

    //鼠标按下事件,获取屏幕位置,并显示,移动显示框
    void Widget::mousePressEvent(QMouseEvent *event)
    {
        if(event->button() != Qt::LeftButton){
            return ;
        }
        QPoint point    = event->pos();
        QPointF winPt   = event->screenPos();
        QPointF gloalPt = event->globalPos();//相对屏幕的绝对位置
    
        QString str = QString::asprintf("point = (%d,%d)",point.x(),point.y());
        str        += QString::asprintf("\nwinPt = (%.0f,%.0f)",winPt.x(),winPt.y());
        str        += QString::asprintf("\ngloalPt = (%.0f,%.0f)",gloalPt.x(),gloalPt.y());
    
        ui->label->move(event->pos());
        ui->label->setText(str);
        QWidget::mousePressEvent(event);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    二、鼠标移动事件

    //鼠标移动实时获取鼠标位置,并显示
    void Widget::mouseMoveEvent(QMouseEvent *event)
    {
       QString str;
      QPoint point    = event->pos();
       //str = QString("%1 , %2").arg(QCursor().pos().x()).arg(QCursor().pos().y());//获取鼠标相对整个屏幕的位置
     str = QString::asprintf("(%d,%d)",point.x(),point.y());//获取相对屏幕的位置
    //   ui->label->move(event->pos());
       ui->label_2->setText(str);//实时显示在框内
    
       QWidget::mouseMoveEvent(event);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    三、键盘按下事件

    //点击键盘按钮A或者左键,左移;点击按钮右键或者D键,右移;以此类推
    void Widget::keyPressEvent(QKeyEvent *event)
    {
        QPoint poit = ui->pushButton->pos();//获取按钮坐标位置
    
        if((event->key() == Qt:: Key_A) || (event->key() == Qt::Key_Left)){
            ui->pushButton->move(poit.x() -30, poit.y());
        }else if((event->key() == Qt::Key_W) || (event->key() == Qt::Key_Up)){
            ui->pushButton->move(poit.x(), poit.y() -30);
        }else if((event->key() == Qt::Key_S) || event->key() == Qt::Key_Down){
            ui->pushButton->move(poit.x(), poit.y() + 30);
        }else if((event->key() == Qt::Key_D) || event->key() == Qt::Key_Right){
            ui->pushButton->move(poit.x() + 30,poit.y());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    四、绘制背景图片

    //绘制一张背景图片
    void Widget::paintEvent (QPaintEvent *event){
        Q_UNUSED(event);
    
        QPainter pait(this);
        pait.drawPixmap(0,0,this->width(),this->height(),QPixmap(":/image/bj.png"));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    五、注意

    构造函数中加入以下代码,才可以实现相应事件。

    this->setMouseTracking(true);//开启鼠标跟踪

    grabKeyboard();//获取所有按键

    通过以下操作,可以查看Widget类中的虚函数事件。
    第一步右键点击类,第二步点击Refactor,第三步点击Insert Virty=ual Function of Base Classes,就可以弹出虚函数事件。
    在这里插入图片描述
    选中相关需要的虚函数事件,将2个Add相关的复选框选中,点击ok即可添加。
    在这里插入图片描述

  • 相关阅读:
    UID、EUID、GID和EGID
    前端页面根据后端返回的文本将换行符(“↵”)进行换行展示
    java计算机毕业设计高校人事管理系统源码+mysql数据库+系统+lw文档+部署
    Java开发学习(二十二)----Spring事务属性、事务传播行为
    python判断语句
    拼多多面试题
    【数据架构】什么是运营报告?
    Lombok
    qt开发从入门到实战2
    3分钟:腾讯云免费SSL证书申请教程_免费HTTPS证书50张
  • 原文地址:https://blog.csdn.net/weixin_44585751/article/details/134244481