#include "myview.h" #include #include #define VIEW_CENTER viewport()->rect().center() const double PI = 3.1415926535898; MyView::MyView(QWidget *parent) : QGraphicsView(parent), beishu(1.00000) { setDragMode(QGraphicsView::ScrollHandDrag); } void MyView::mousePressEvent(QMouseEvent *event) { // qDebug("x is %d",event->pos().x()); bottonstatus = true; QGraphicsView::mousePressEvent(event); } void MyView::mouseMoveEvent(QMouseEvent *event) { QGraphicsView::mouseMoveEvent(event); // QScrollBar * ps = verticalScrollBar(); // std::cout<<" size is "<size().height()<<" v = "<value()<size().width()<<" h = "<value()<angleDelta(); // 正值表示滚轮远离使用者(放大),负值表示朝向使用者(缩小) scrollAmount.y() > 0 ? zoomIn() : zoomOut(); } // 放大 void MyView::zoomIn() { int width,hgt; width = sceneRect().width(); hgt = sceneRect().height(); QScrollBar * psV = verticalScrollBar(); QScrollBar * psH = horizontalScrollBar(); // qDebug("%d %d ",width,hgt); int centery = (psV->value() + psV->size().height()/2)/beishu; int centerx = (psH->value() + psH->size().width()/2)/beishu; scale(1.1, 1.1); beishu *= 1.1; // centerOn(450, 700 - (200 / beishu)); // qDebug("beishu is %f",beishu); centerOn(centerx,centery); // QPoint x = viewport()->rect().center(); // std::cout<<" x is"<size().height()<<" v = "<value()<value() + psV->size().height()/2)/beishu; int centerx = (psH->value() + psH->size().width()/2)/beishu; scale(1 / 1.1, 1 / 1.1); beishu /= 1.1; // centerOn(450, 700 - (200 / beishu)); centerOn(centerx,centery); } void MyView::zoomone() { scale(1 /beishu, 1 / beishu); beishu = 1.0; } void MyView::mouseDoubleClickEvent(QMouseEvent *event) { QScrollBar * psV = verticalScrollBar(); QScrollBar * psH = horizontalScrollBar(); int centery = (psV->value() + psV->size().height()/2)/beishu; int centerx = (psH->value() + psH->size().width()/2)/beishu; // qDebug("x is %d y is %d view center x is %d centerx is %d",event->pos().x(), // event->pos().y(), // viewport()->rect().center().x(),centerx); int viewx,viewy; if(beishu == 0)return; viewx = centerx +(event->pos().x() - viewport()->rect().center().x())/beishu; viewy = centery +(event->pos().y() - viewport()->rect().center().y())/beishu; QPoint viewpoint; viewpoint.setX(viewx); viewpoint.setY(viewy); emit dbclickxy(viewx,viewy); qDebug("view x is %d view y is %d ",viewx,viewy); }