QT 实现放大镜跟随鼠标效果

这是最终的效果
在这里插入图片描述
两个类,两个头文件,两个CPP文件:

Lens.h
#ifndef LENSE_H
#define LENSE_H
#include <QWidget>
class Lense : public QWidget
{
   
    Q_OBJECT
public:
    explicit Lense(QWidget *parent = nullptr);
    void setRadius(int r);
    void setZoomTarget(QWidget * target);
protected:
    virtual void paintEvent(QPaintEvent *event) override;
    virtual void mouseMoveEvent(QMouseEvent *event) ;
private:
    QWidget* mZoomTarget;
    int mRadius;
};
#endif // LENSE_H

Lens.cpp
#include "Lense.h"
#include <QPaintEvent>
#include <QPainter>
#include <QDebug>
#include <QPainterPath>
Lense::Lense(QWidget *parent) : QWidget(parent),mZoomTarget(nullptr),mRadius(64)
{
   
    resize(mRadius,mRadius);
    setMouseTracking(true);
}
void Lense::setRadius(int r){
   
    if(r > 0 && mRadius != r){
   
        mRadius = r;
        setFixedSize(r,r);
    }
}
void Lense::mouseMoveEvent(QMouseEvent *event) {
   
    if(!event) return;
    auto pos = mapToParent( event->pos() );
    pos.setX(pos.x(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值