myview.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "myview.h"
  2. #include <QScrollBar>
  3. #include <iostream>
  4. #define VIEW_CENTER viewport()->rect().center()
  5. const double PI = 3.1415926535898;
  6. MyView::MyView(QWidget *parent) :
  7. QGraphicsView(parent),
  8. beishu(1.00000)
  9. {
  10. setDragMode(QGraphicsView::ScrollHandDrag);
  11. }
  12. void MyView::mousePressEvent(QMouseEvent *event)
  13. {
  14. // qDebug("x is %d",event->pos().x());
  15. bottonstatus = true;
  16. QGraphicsView::mousePressEvent(event);
  17. }
  18. void MyView::mouseMoveEvent(QMouseEvent *event)
  19. {
  20. QGraphicsView::mouseMoveEvent(event);
  21. // QScrollBar * ps = verticalScrollBar();
  22. // std::cout<<" size is "<<ps->size().height()<<" v = "<<ps->value()<<std::endl;
  23. // QScrollBar * ps2= horizontalScrollBar();
  24. // std::cout<<" size is "<<ps2->size().width()<<" h = "<<ps2->value()<<std::endl;
  25. }
  26. void MyView::mouseReleaseEvent(QMouseEvent *event)
  27. {
  28. bottonstatus = false;
  29. QGraphicsView::mouseReleaseEvent(event);
  30. }
  31. // 放大/缩小
  32. void MyView::wheelEvent(QWheelEvent *event)
  33. {
  34. // 滚轮的滚动量
  35. QPoint scrollAmount = event->angleDelta();
  36. // 正值表示滚轮远离使用者(放大),负值表示朝向使用者(缩小)
  37. scrollAmount.y() > 0 ? zoomIn() : zoomOut();
  38. }
  39. // 放大
  40. void MyView::zoomIn()
  41. {
  42. int width,hgt;
  43. width = sceneRect().width();
  44. hgt = sceneRect().height();
  45. QScrollBar * psV = verticalScrollBar();
  46. QScrollBar * psH = horizontalScrollBar();
  47. int centery = (psV->value() + psV->size().height()/2)/beishu;
  48. int centerx = (psH->value() + psH->size().width()/2)/beishu;
  49. scale(1.1, 1.1);
  50. beishu *= 1.1;
  51. // centerOn(450, 700 - (200 / beishu));
  52. centerOn(centerx,centery);
  53. // QPoint x = viewport()->rect().center();
  54. // std::cout<<" x is"<<sceneRect().bottom()<<" y is "<<sceneRect().y()<<std::endl;
  55. // QScrollBar * ps = verticalScrollBar();
  56. // std::cout<<" size is "<<ps->size().height()<<" v = "<<ps->value()<<std::endl;
  57. }
  58. // 缩小
  59. void MyView::zoomOut()
  60. {
  61. int width,hgt;
  62. width = sceneRect().width();
  63. hgt = sceneRect().height();
  64. QScrollBar * psV = verticalScrollBar();
  65. QScrollBar * psH = horizontalScrollBar();
  66. int centery = (psV->value() + psV->size().height()/2)/beishu;
  67. int centerx = (psH->value() + psH->size().width()/2)/beishu;
  68. scale(1 / 1.1, 1 / 1.1);
  69. beishu /= 1.1;
  70. // centerOn(450, 700 - (200 / beishu));
  71. centerOn(centerx,centery);
  72. }
  73. void MyView::mouseDoubleClickEvent(QMouseEvent *event)
  74. {
  75. QScrollBar * psV = verticalScrollBar();
  76. QScrollBar * psH = horizontalScrollBar();
  77. int centery = (psV->value() + psV->size().height()/2)/beishu;
  78. int centerx = (psH->value() + psH->size().width()/2)/beishu;
  79. // qDebug("x is %d y is %d view center x is %d centerx is %d",event->pos().x(),
  80. // event->pos().y(),
  81. // viewport()->rect().center().x(),centerx);
  82. int viewx,viewy;
  83. if(beishu == 0)return;
  84. viewx = centerx +(event->pos().x() - viewport()->rect().center().x())/beishu;
  85. viewy = centery +(event->pos().y() - viewport()->rect().center().y())/beishu;
  86. QPoint viewpoint;
  87. viewpoint.setX(viewx);
  88. viewpoint.setY(viewy);
  89. // qDebug("view x is %d view y is %d ",viewx,viewy);
  90. }