QT 鼠标移动追踪

曾在网上看了一个特别骚的操作,某个程序员写了一个表白神器,如下图:

原文 传送门:https://baijiahao.baidu.com/s?id=1607861831490061736&wfr=spider&for=pc

这表白神器中的拒绝按钮 是无法选中的, 鼠标移动这个按钮也移动,今天学习QT时,也试图实现 控件随着鼠标移动而移动让其选不中,不过目前只实现了一个思路:在鼠标移动 的时候打印出鼠标的位置,代码如下:

在窗口类中重写鼠标移动事件:头文件代码如下:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include<QEvent>

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = nullptr);
    bool event(QEvent*  ev );
    void mousePressEvent(QMouseEvent* ev);
    void mouseReleaseEvent(QMouseEvent*);
    void mouseMoveEvent(QMouseEvent*);      //鼠标移动函数

    void keyPressEvent(QKeyEvent* );
    void keyReleaseEvent(QKeyEvent*);

signals:

public slots:
};

#endif // MYWIDGET_H

注意上述代码中只需要把mouseMoveEvent那一行,其他 的行不需要添加,否则若未在源文件中实现不需要的函数,编译器时是通不过的(Windows下的QT会报LINK_2019错误)

源的件中鼠标移动函数实现如下:

void MyWidget::mouseMoveEvent(QMouseEvent *ev)  //鼠标移动函数
{

    QPoint pt = ev->pos();
    qDebug()<<pt;
}

最后在main 函数中写上:

int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    MyWidget w;
    w.setMouseTracking(true);   //开启鼠标位置追踪
    w.show();


    return app.exec();
}

主要点就是setMouseTracking()函数的 调用,注意一定是在创建窗口对象完成之后在show函数前调用这个setMouseTracking函数,若在其他地方调用,因为涉及到QT中的信号循环机制,无法达到预期的效果。关于SetMouseTracking函数,QT帮助 文档中写道:

If mouse tracking is disabled (the default), the widget only receives mouse move events when at least one mouse button is pressed while the mouse is being moved.

If mouse tracking is enabled, the widget receives mouse move events even if no buttons are pressed.

Access functions:

 

bool

hasMouseTracking() const

void

setMouseTracking(bool enable)

 

等我学完了QT,回来复习的时候尝试完整实现原文功能

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值