123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #include "myview.h"
- #include <QScrollBar>
- #include <iostream>
- #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 "<<ps->size().height()<<" v = "<<ps->value()<<std::endl;
- // QScrollBar * ps2= horizontalScrollBar();
- // std::cout<<" size is "<<ps2->size().width()<<" h = "<<ps2->value()<<std::endl;
- }
- void MyView::mouseReleaseEvent(QMouseEvent *event)
- {
- bottonstatus = false;
- QGraphicsView::mouseReleaseEvent(event);
- }
- // 放大/缩小
- void MyView::wheelEvent(QWheelEvent *event)
- {
- // 滚轮的滚动量
- QPoint scrollAmount = event->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"<<sceneRect().bottom()<<" y is "<<sceneRect().y()<<std::endl;
- // QScrollBar * ps = verticalScrollBar();
- // std::cout<<" size is "<<ps->size().height()<<" v = "<<ps->value()<<std::endl;
- }
- // 缩小
- void MyView::zoomOut()
- {
- int width,hgt;
- width = sceneRect().width();
- hgt = sceneRect().height();
- QScrollBar * psV = verticalScrollBar();
- QScrollBar * psH = horizontalScrollBar();
- int centery = (psV->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);
- }
|