这是最终的效果
两个类,两个头文件,两个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(