#include #include "VSmallView.h" #include "VFrame.h" VSmallView::VSmallView(QWidget * parent): QGraphicsView(parent) { setCursor(Qt::CrossCursor); fFrame = new VFrame(this); connect(fFrame, SIGNAL(changed(const QRect&)), this, SLOT(frameChanged(const QRect&))); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } //VSmallView::~VSmallView() //{ //} void VSmallView::setScene(QGraphicsScene * scene) { QGraphicsView::setScene(scene); connect(scene, SIGNAL(changed(const QList &)), this, SLOT(fitSceneToView())); } void VSmallView::fitSceneToView() { QRectF rect = scene()->itemsBoundingRect(); if (rect.width() == 0. || rect.height() == 0.) return; //QRectF rect = scene()->sceneRect(); QRect rect1 = contentsRect(); double scaleX = double(rect1.width()) / double(rect.width()); double scaleY = double(rect1.height()) / double(rect.height()); QMatrix matrix; if (scaleX <= scaleY) { matrix.scale(scaleX, scaleX); } else { matrix.scale(scaleY, scaleY); } setMatrix(matrix); } void VSmallView::updateFrame(const QRectF& rect) { QPolygon pol = mapFromScene(rect); QRect rect1 = pol.boundingRect(); fFrame->setGeometry(rect1); fFrame->setMaskRegion(); } void VSmallView::frameChanged(const QRect& rect) { QPolygonF pol = mapToScene(rect); emit rectChanged(pol.boundingRect()); } void VSmallView::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { fFrame->setGeometry(event->x() - fFrame->width()/2, event->y() - fFrame->height()/2, fFrame->width(), fFrame->height()); QPolygonF pol = mapToScene(fFrame->geometry()); emit rectChanged(pol.boundingRect()); } }