Qt—鼠标移动事件的趣味小程序:会移动的按钮

1.项目目标

本次根据Qt的鼠标移动事件实现一个趣味小程序:当鼠标移动到按钮时,按钮就会随机出现在置,以至于根本点击不到按钮。​​​​​

2.项目步骤

首先现在ui界面设计控件(也可以用代码的方式创建,就不多说了)

第一个按钮不需要移动,所以点击它后只需要一个简单的槽函数把QLabel的文本更改一下即可。

接下来重点是第二个按钮,如何实现它的随机移动从而让鼠标点击不到呢?这个时候就可以用到鼠标移动事件了。当鼠标移动到按钮中,按钮会随机移动,所以我们还需要qrand来进行随机数的设置。

由于是对按钮进行鼠标移动事件,所以我们需要一个继承按钮的类来进行相关设置。

在完成基本配置后,就可以进行后续操作了。接下来就是添加鼠标移动事件的函数了

cpp 复制代码
//在.h文件中添加如下声明代码,点击改行代码按住alt+F4自动给.cpp添加定义代码

void mouseMoveEvent(QMouseEvent* event);//鼠标移动事件

还需要注意的一点是此时并不是真正的随机,所以还需要设置随机数种子,把它设置为当前时间 。

设置完毕后我们运行代码,发现按钮并不会移动,因为我们还没指定某一个按钮去移动它,所以我们需要把第二个按钮的类设置为我们刚刚创建好的类。

此时再运行程序,按钮会移动,成功。

3.代码展示

因为主界面没什么改变,只添加了一个槽函数,所以不展示了,只展示MyEven.h和MyEvent.cpp

cpp 复制代码
//MyEvent.h

#ifndef MYEVENT_H
#define MYEVENT_H

#include <QWidget>
#include <QPushButton>

class MyEvent : public QPushButton
{
    Q_OBJECT
public:
    explicit MyEvent(QWidget *parent = nullptr);

    void mouseMoveEvent(QMouseEvent* event);//鼠标移动事件

signals:

};

#endif // MYEVENT_H
cpp 复制代码
//MyEvent.cpp

#include <QTime>

MyEvent::MyEvent(QWidget *parent) : QPushButton(parent)
{
    setMouseTracking(true);
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//设置为按当前时间
}

void MyEvent::mouseMoveEvent(QMouseEvent* event)
{
    int current_x=this->x();//获取按钮的x轴坐标
    int current_y=this->y();//获取按钮的轴坐标

    int mouse_x=event->x();//获取鼠标的x轴坐标
    int mouse_y=event->y();//获取鼠标的y轴坐标

    if((current_x+mouse_x>=mouse_x)&&(current_x+mouse_x<=current_x+this->width()))
    {
        if((current_y+mouse_y>=current_y)&&(current_y+mouse_y<=current_y+this->height()))
        {
            //按钮应该在父容器里面移动,不能超出
            QWidget *parent=this->parentWidget();//获取父类,也就是QWidget对象

            //取x轴和y轴的随机值
            int btn_x=qrand()%(parent->width()-this->width());
            int btn_y=qrand()%(parent->height()-this->height());

            this->move(btn_x,btn_y);
        }
    }
}
相关推荐
华一精品Adreamer18 小时前
便携式显示器供应链与成本结构:挑战与机遇
计算机外设
开开心心就好20 小时前
图片校正漂白工具永久免费,矫正实时预览
网络·人工智能·windows·计算机视觉·计算机外设·电脑·excel
开开心心就好21 小时前
免费批量抠图软件大模型,复杂倒影精准去除
网络·windows·pdf·计算机外设·电脑·硬件架构·材料工程
Jwest20213 天前
工业显示器在铁路智能充电柜中的应用
计算机外设
木梯子3 天前
罗技G系列游戏外设全解析及G304X入门游戏鼠标推荐
计算机外设·鼠标
开开心心就好4 天前
键盘改键工具免安装,自定义键位屏蔽误触
java·网络·windows·随机森林·计算机外设·电脑·excel
软件资深者4 天前
USB存储设备管理工具 启用或者禁用+usb修复
windows·microsoft·计算机外设·系统修复
卢锡荣5 天前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
goodmao5 天前
【macOS】【mouse】设置鼠标大小
macos·计算机外设·鼠标·mouse
开开心心就好5 天前
键盘映射工具改键位,绿色版设置后重启生效
网络·windows·tcp/ip·pdf·计算机外设·电脑·excel