WindowAppPouNavView.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #include "WindowAppPouNavView.h"
  2. #include "WindowAppPouView.h"
  3. #include "CommonDraw.h"
  4. //===================================================================
  5. //
  6. // WindowAppNavView::OpacityHelper
  7. //
  8. //===================================================================
  9. WindowAppPouNavView::OpacityHelper::OpacityHelper(QWidget* parent)
  10. : QObject(parent)
  11. , m_opacityFx(new QGraphicsOpacityEffect(parent))
  12. , m_opacityAnimation(new QPropertyAnimation(m_opacityFx, "opacity"))
  13. {
  14. // 设置透明窗体的显示效果
  15. parent->setGraphicsEffect(m_opacityFx);
  16. // 设置渐变动作的间隔
  17. m_opacityAnimation->setDuration(300);
  18. }
  19. /// <summary>
  20. /// 设置透明度
  21. /// </summary>
  22. /// <param name="opacity"></param>
  23. /// <param name="animated"></param>
  24. void WindowAppPouNavView::OpacityHelper::setOpacity(qreal opacity, bool animated)
  25. {
  26. // 是否采用渐变效果显示
  27. if (!animated)
  28. {
  29. m_opacityFx->setOpacity(opacity);
  30. return;
  31. }
  32. // 设置透明度的详细效果
  33. m_opacityAnimation->stop();
  34. m_opacityAnimation->setStartValue(m_opacityFx->opacity());
  35. m_opacityAnimation->setEndValue(opacity);
  36. m_opacityAnimation->start();
  37. }
  38. //===================================================================
  39. //
  40. // WindowAppNavView
  41. //
  42. //===================================================================
  43. WindowAppPouNavView::WindowAppPouNavView(QWidget *parent)
  44. : QGraphicsView (parent)
  45. , m_viewportRegion(this->rect())
  46. , m_opacityHelper(new OpacityHelper(this))
  47. {
  48. // 初始化界面风格
  49. this->initStyle();
  50. }
  51. /// <summary>
  52. /// 初始化界面风格
  53. /// </summary>
  54. void WindowAppPouNavView::initStyle()
  55. {
  56. // 隐藏横纵向两个滚动条
  57. setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  58. setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  59. // 设置背景色
  60. setStyleSheet("background-color: rgba(10, 10, 10, 128);"
  61. "border-radius: 3px;");
  62. }
  63. /// <summary>
  64. /// 绑定主视图
  65. /// </summary>
  66. /// <param name="mainView"></param>
  67. void WindowAppPouNavView::setMainView(QGraphicsView *mainView)
  68. {
  69. m_mainView = mainView;
  70. }
  71. /// <summary>
  72. /// 设置透明度
  73. /// </summary>
  74. /// <param name="opacity"></param>
  75. /// <param name="animated"></param>
  76. void WindowAppPouNavView::setOpacity(qreal opacity, bool animated)
  77. {
  78. m_opacityHelper->setOpacity(opacity, animated);
  79. }
  80. /// <summary>
  81. /// 刷新界面坐标(暂未使用)
  82. /// </summary>
  83. void WindowAppPouNavView::updateMainViewportRegion()
  84. {
  85. if (m_mainView != nullptr)
  86. {
  87. m_viewportRegion = mapFromScene(m_mainView->mapToScene(m_mainView->rect()));
  88. update();
  89. }
  90. }
  91. /// <summary>
  92. /// 鼠标左键点在鸟瞰图时,设置Pou界面随动
  93. /// </summary>
  94. /// <param name="event"></param>
  95. void WindowAppPouNavView::mousePressEvent(QMouseEvent *event)
  96. {
  97. m_mouseDown = true;
  98. if (m_mainView)
  99. {
  100. m_mainView->centerOn(mapToScene(event->pos()));
  101. update();
  102. }
  103. event->accept();
  104. }
  105. /// <summary>
  106. /// 鼠标移动时,设置Pou界面随动
  107. /// </summary>
  108. /// <param name="event"></param>
  109. void WindowAppPouNavView::mouseMoveEvent(QMouseEvent *event)
  110. {
  111. if (m_mouseDown && m_mainView)
  112. {
  113. m_mainView->centerOn(mapToScene(event->pos()));
  114. update();
  115. event->accept();
  116. } else
  117. {
  118. event->ignore();
  119. }
  120. }
  121. /// <summary>
  122. /// 退出Pou视图的随动状态
  123. /// </summary>
  124. /// <param name="event"></param>
  125. void WindowAppPouNavView::mouseReleaseEvent(QMouseEvent *event)
  126. {
  127. m_mouseDown = false;
  128. event->accept();
  129. }
  130. /// <summary>
  131. /// 忽略滚轮消息
  132. /// </summary>
  133. /// <param name="event"></param>
  134. void WindowAppPouNavView::wheelEvent(QWheelEvent *event)
  135. {
  136. event->ignore();
  137. return QGraphicsView::wheelEvent(event);
  138. }
  139. /// <summary>
  140. /// 绘制预览窗口边框
  141. /// </summary>
  142. /// <param name="event"></param>
  143. void WindowAppPouNavView::paintEvent(QPaintEvent *event)
  144. {
  145. QGraphicsView::paintEvent(event);
  146. QPainter painter(viewport());
  147. painter.setPen(QPen(Qt::gray, 1));
  148. painter.drawRect(m_viewportRegion.boundingRect());
  149. }