Qt鼠标事件—实现移动按钮

一、前言

Qt鼠标事件,是重写Qt中虚函数的功能进行具体实现,通过检测鼠标位置可以制作出永远点不到的按钮,或者点击后随机移动的按钮。

下面是鼠标事件和对应函数

鼠标事件函数
mousePressEvent鼠标点击
mouseReleaseEvent鼠标弹开
mouseMoveEvent鼠标移动
mouseDoubleClickEvent鼠标双击

二、原理以及具体实现

1.鼠标点击—mousePressEvent

鼠标点击时进入该函数,可以通过button()方法检测是什么按键点击

左键:Qt::LeftButton

右键:Qt::RightButton

滚轮:Qt::MidButton

侧键前进:Qt::ForwardButton

侧键返回:Qt::BackButton

同时globalPos()和windowPos()输出在窗体中的坐标和在windows框中的坐标

2.鼠标弹起—mouseReleaseEvent

鼠标弹起时进入该函数实现功能

3.鼠标移动—mouseMoveEvent

鼠标移动时进入该函数实现功能

4.鼠标双击—mouseDoubleClickEvent

鼠标双击时进入该函数实现功能

5.随机数—qsrand

生成随机数种子

具体思路:

通过mouseMoveEvent()检测鼠标当前所在坐标,同时与设置的按钮坐标进行比较,当所在坐标属于按钮坐标范围内时,将按钮进行随机数坐标移动

三、源码如下:

#include "mybutton.h"
#include<QMouseEvent>
#include<QTime>
MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{
    setMouseTracking(true);

    //产生随机数种子
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
}

void MyButton::mouseMoveEvent(QMouseEvent *e)
{
//   QWidget *parentW =  this->parentWidget();
   int current_wid_x = this->x();
   int current_wid_y = this->y();
   int mouse_x = e ->x();
   int mouse_y = e ->y();
   if((mouse_x + current_wid_x) >= current_wid_x && ((mouse_x+current_wid_x)<=current_wid_x+this->width()))
   {
        if((mouse_y+current_wid_y)>=current_wid_y && ((mouse_y+current_wid_y)<=current_wid_y+this->height()))
        {
            //产生随机数,供给按钮变换,变化后的值,一定要在窗体中
            QWidget *parentW =this->parentWidget();
            //x
            int btn_x = qrand()%(parentW->width()-this->width());
            //y
            int btn_y = qrand()%(parentW->height()-this->height());
            this->move(btn_x,btn_y);
            //this->update();
        }
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值