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);
        }
    }
}
相关推荐
一晌小贪欢4 小时前
Python键盘鼠标自动化库详解:从入门到精通
python·自动化·计算机外设·python鼠标·python键盘·python操控鼠标·python操控键盘
避避风港10 小时前
联想键盘失灵处理方法
计算机外设
fukai77222 天前
BetterDisplay Pro for Mac显示器增强工具
macos·计算机外设
dldw7773 天前
银河麒麟定制版系统奇葩问题之鼠标坏了,还原系统
计算机外设
ken22324 天前
在被窝里使用笔记本电脑,容易损坏键盘?
计算机外设·电脑
某林2124 天前
如何使用ROS 2与STM32进行串口通信,并实现通过键盘按键‘1’来控制LED灯开关
stm32·嵌入式硬件·计算机外设
阿昭L6 天前
计算机外设与CPU通信
汇编·计算机外设
Xxtaoaooo6 天前
从普通屏到 明基RD320U:一台显示器如何提升我的编码效率?
计算机外设·专业工具·明基rd320u·专业编程显示器·提效工具
扬道财经8 天前
中小手抓握鼠标推荐:罗技GPW4小狗版,为亚洲手型而生的“小尺寸旗舰”
计算机外设
扬道财经8 天前
2025年小手无线鼠标推荐:罗技GPW4小狗版凭“小尺寸+大性能”成为“小手神器”
计算机外设