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);
        }
    }
}
相关推荐
打工仔折腾 AI1 天前
从零写一个CAD 04:中键拖动平移,抓住一个点让它一直待在鼠标底下
人工智能·后端·python·性能优化·计算机外设·ai agent 实战
李游Leo2 天前
HarmonyOS 7 ArkUI + Window Kit:折叠屏编辑页的键盘避让快照与焦点恢复时序【鸿蒙心迹】
华为·计算机外设·harmonyos
励志不掉头发的内向程序员3 天前
【从零写一个CAD 04】中键拖动平移:抓住一个点,让它一直待在鼠标底下
开发语言·c++·qt·学习·系统架构·计算机外设
你挚爱的强哥4 天前
【sgKeyboard】自定义组件:虚拟键盘
前端·javascript·计算机外设
溪语流沙5 天前
【每天一个CSS | Day08】整排按钮被鼠标吸走的磁吸导航
前端·css·计算机外设
bj_bluewei_tech6 天前
拯救者键盘部分按键失灵,不是键盘本身的问题
计算机外设·电脑·笔记本电脑
石一峰6996 天前
Linux INPUT 与 I2C 子系统关联
linux·运维·计算机外设
lemoncat86 天前
双飞燕FG10鼠标摔落无响应|拆解修复|非广
计算机外设
梅梅96613 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
归零鸟21 天前
笔记本内屏黑屏,系统却说 “显示器一切正常“:一次 Intel PSR2 导致的 eDP 排查实录
计算机外设·电脑