pixmapviewer.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "pixmapviewer.h"
  2. #include "ui_pixmapviewer.h"
  3. PixmapViewer::PixmapViewer(QWidget* parent)
  4. : QWidget(parent)
  5. , ui(new Ui::PixmapViewer)
  6. {
  7. ui->setupUi(this);
  8. }
  9. PixmapViewer::~PixmapViewer()
  10. {
  11. delete ui;
  12. }
  13. void PixmapViewer::paintEvent(QPaintEvent* event)
  14. {
  15. QPainter painter;
  16. painter.begin(this);
  17. painter.fillRect(rect(), QColor(97, 97, 97));
  18. if (!m_tempPix.isNull()) {
  19. QRect rc;
  20. rc.setRect(m_startPoint.x(), m_startPoint.y(), m_tempPix.width(), m_tempPix.height());
  21. painter.drawPixmap(rc, m_tempPix, m_tempPix.rect());
  22. }
  23. painter.end();
  24. }
  25. void PixmapViewer::setImage(QPixmap& image)
  26. {
  27. m_image = image;
  28. m_startPoint = QPoint(1, 1);
  29. setFactor(1);
  30. m_mousedownFlag = false;
  31. }
  32. void PixmapViewer::setFactor(double factor)
  33. {
  34. m_factor = factor;
  35. m_tempPix = m_image.scaled(m_image.width() * m_factor, m_image.height() * factor,
  36. Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
  37. update();
  38. }
  39. void PixmapViewer::wheelEvent(QWheelEvent* event)
  40. {
  41. if (event->delta() > 0) {
  42. setFactor(m_factor * 1.1);
  43. } else {
  44. setFactor(m_factor * 0.9);
  45. }
  46. }
  47. void PixmapViewer::mousePressEvent(QMouseEvent* event)
  48. {
  49. m_mousedownFlag = true;
  50. m_mousedownPoint = mapFromGlobal(cursor().pos());
  51. update();
  52. }
  53. void PixmapViewer::mouseReleaseEvent(QMouseEvent* event)
  54. {
  55. m_mousedownFlag = false;
  56. update();
  57. }
  58. void PixmapViewer::mouseMoveEvent(QMouseEvent* event)
  59. {
  60. if (m_mousedownFlag) {
  61. QPoint pt = mapFromGlobal(cursor().pos());
  62. int x = pt.x() - m_mousedownPoint.x();
  63. int y = pt.y() - m_mousedownPoint.y();
  64. m_startPoint.setX(m_startPoint.x() + x);
  65. m_startPoint.setY(m_startPoint.y() + y);
  66. m_mousedownPoint = pt;
  67. update();
  68. }
  69. }