myview.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. // qDebug("%d %d ",width,hgt);
  48. int centery = (psV->value() + psV->size().height()/2)/beishu;
  49. int centerx = (psH->value() + psH->size().width()/2)/beishu;
  50. scale(1.1, 1.1);
  51. beishu *= 1.1;
  52. // centerOn(450, 700 - (200 / beishu));
  53. // qDebug("beishu is %f",beishu);
  54. centerOn(centerx,centery);
  55. // QPoint x = viewport()->rect().center();
  56. // std::cout<<" x is"<<sceneRect().bottom()<<" y is "<<sceneRect().y()<<std::endl;
  57. // QScrollBar * ps = verticalScrollBar();
  58. // std::cout<<" size is "<<ps->size().height()<<" v = "<<ps->value()<<std::endl;
  59. }
  60. // 缩小
  61. void MyView::zoomOut()
  62. {
  63. int width,hgt;
  64. width = sceneRect().width();
  65. hgt = sceneRect().height();
  66. QScrollBar * psV = verticalScrollBar();
  67. QScrollBar * psH = horizontalScrollBar();
  68. int centery = (psV->value() + psV->size().height()/2)/beishu;
  69. int centerx = (psH->value() + psH->size().width()/2)/beishu;
  70. scale(1 / 1.1, 1 / 1.1);
  71. beishu /= 1.1;
  72. // centerOn(450, 700 - (200 / beishu));
  73. centerOn(centerx,centery);
  74. }
  75. void MyView::zoomone()
  76. {
  77. scale(1 /beishu, 1 / beishu);
  78. beishu = 1.0;
  79. }
  80. void MyView::mouseDoubleClickEvent(QMouseEvent *event)
  81. {
  82. QScrollBar * psV = verticalScrollBar();
  83. QScrollBar * psH = horizontalScrollBar();
  84. int centery = (psV->value() + psV->size().height()/2)/beishu;
  85. int centerx = (psH->value() + psH->size().width()/2)/beishu;
  86. // qDebug("x is %d y is %d view center x is %d centerx is %d",event->pos().x(),
  87. // event->pos().y(),
  88. // viewport()->rect().center().x(),centerx);
  89. int viewx,viewy;
  90. if(beishu == 0)return;
  91. viewx = centerx +(event->pos().x() - viewport()->rect().center().x())/beishu;
  92. viewy = centery +(event->pos().y() - viewport()->rect().center().y())/beishu;
  93. QPoint viewpoint;
  94. viewpoint.setX(viewx);
  95. viewpoint.setY(viewy);
  96. emit dbclickxy(viewx,viewy);
  97. qDebug("view x is %d view y is %d ",viewx,viewy);
  98. }