123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #include "WindowAppPouNavView.h"
- #include "WindowAppPouView.h"
- #include "CommonDraw.h"
- //===================================================================
- //
- // WindowAppNavView::OpacityHelper
- //
- //===================================================================
- WindowAppPouNavView::OpacityHelper::OpacityHelper(QWidget* parent)
- : QObject(parent)
- , m_opacityFx(new QGraphicsOpacityEffect(parent))
- , m_opacityAnimation(new QPropertyAnimation(m_opacityFx, "opacity"))
- {
- // 设置透明窗体的显示效果
- parent->setGraphicsEffect(m_opacityFx);
- // 设置渐变动作的间隔
- m_opacityAnimation->setDuration(300);
- }
- /// <summary>
- /// 设置透明度
- /// </summary>
- /// <param name="opacity"></param>
- /// <param name="animated"></param>
- void WindowAppPouNavView::OpacityHelper::setOpacity(qreal opacity, bool animated)
- {
- // 是否采用渐变效果显示
- if (!animated)
- {
- m_opacityFx->setOpacity(opacity);
- return;
- }
- // 设置透明度的详细效果
- m_opacityAnimation->stop();
- m_opacityAnimation->setStartValue(m_opacityFx->opacity());
- m_opacityAnimation->setEndValue(opacity);
- m_opacityAnimation->start();
- }
- //===================================================================
- //
- // WindowAppNavView
- //
- //===================================================================
- WindowAppPouNavView::WindowAppPouNavView(QWidget *parent)
- : QGraphicsView (parent)
- , m_viewportRegion(this->rect())
- , m_opacityHelper(new OpacityHelper(this))
- {
- // 初始化界面风格
- this->initStyle();
- }
- /// <summary>
- /// 初始化界面风格
- /// </summary>
- void WindowAppPouNavView::initStyle()
- {
- // 隐藏横纵向两个滚动条
- setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- // 设置背景色
- setStyleSheet("background-color: rgba(10, 10, 10, 128);"
- "border-radius: 3px;");
- }
- /// <summary>
- /// 绑定主视图
- /// </summary>
- /// <param name="mainView"></param>
- void WindowAppPouNavView::setMainView(QGraphicsView *mainView)
- {
- m_mainView = mainView;
- }
- /// <summary>
- /// 设置透明度
- /// </summary>
- /// <param name="opacity"></param>
- /// <param name="animated"></param>
- void WindowAppPouNavView::setOpacity(qreal opacity, bool animated)
- {
- m_opacityHelper->setOpacity(opacity, animated);
- }
- /// <summary>
- /// 刷新界面坐标(暂未使用)
- /// </summary>
- void WindowAppPouNavView::updateMainViewportRegion()
- {
- if (m_mainView != nullptr)
- {
- m_viewportRegion = mapFromScene(m_mainView->mapToScene(m_mainView->rect()));
- update();
- }
- }
- /// <summary>
- /// 鼠标左键点在鸟瞰图时,设置Pou界面随动
- /// </summary>
- /// <param name="event"></param>
- void WindowAppPouNavView::mousePressEvent(QMouseEvent *event)
- {
- m_mouseDown = true;
- if (m_mainView)
- {
- m_mainView->centerOn(mapToScene(event->pos()));
- update();
- }
- event->accept();
- }
- /// <summary>
- /// 鼠标移动时,设置Pou界面随动
- /// </summary>
- /// <param name="event"></param>
- void WindowAppPouNavView::mouseMoveEvent(QMouseEvent *event)
- {
- if (m_mouseDown && m_mainView)
- {
- m_mainView->centerOn(mapToScene(event->pos()));
- update();
- event->accept();
- } else
- {
- event->ignore();
- }
- }
- /// <summary>
- /// 退出Pou视图的随动状态
- /// </summary>
- /// <param name="event"></param>
- void WindowAppPouNavView::mouseReleaseEvent(QMouseEvent *event)
- {
- m_mouseDown = false;
- event->accept();
- }
- /// <summary>
- /// 忽略滚轮消息
- /// </summary>
- /// <param name="event"></param>
- void WindowAppPouNavView::wheelEvent(QWheelEvent *event)
- {
- event->ignore();
- return QGraphicsView::wheelEvent(event);
- }
- /// <summary>
- /// 绘制预览窗口边框
- /// </summary>
- /// <param name="event"></param>
- void WindowAppPouNavView::paintEvent(QPaintEvent *event)
- {
- QGraphicsView::paintEvent(event);
-
- QPainter painter(viewport());
- painter.setPen(QPen(Qt::gray, 1));
- painter.drawRect(m_viewportRegion.boundingRect());
- }
|