首先感谢五里之南大佬对我的帮助
话不多说,直接上代码
.h文件
#ifndef LOCALSCALEWIDGET_H
#define LOCALSCALEWIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QImage>
class LocalScaleWidget : public QWidget
{
Q_OBJECT
public:
LocalScaleWidget(QWidget *parent=0);
~LocalScaleWidget();
public:
void paintEvent(QPaintEvent *e);
void wheelEvent(QWheelEvent *event);
private:
int x,y;
int width,height;
QPixmap pixmap;
QPixmap mypixmap ;
QPixmap background;
float zoom=1; //缩放系数
QPoint startPos;
};
#endif // LOCALSCALEWIDGET_H
.cpp文件
#include "localscalewidget.h"
#include <QEvent>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QPainter>
#include <QWheelEvent>
#include <QDebug>
LocalScaleWidget::LocalScaleWidget(QWidget *parent):QWidget(parent)
{
setMouseTracking(true);
background.load("D:/output/test.jpg");
startPos = QPoint(0, 0);
}
LocalScaleWidget::~LocalScaleWidget()
{
}
void LocalScaleWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(startPos.x(), startPos.y(), background.scaled(background.width()*zoom,background.height()*zoom,Qt::KeepAspectRatio));
}
void LocalScaleWidget::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0) {
zoom += 0.1;
} else {
zoom -= 0.1;
}
startPos.setX(-(event->pos().x())*(zoom-1));
startPos.setY(-(event->pos().y())*(zoom-1));
qDebug()<<startPos;
update();
}
最后来看下效果图: