#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); } /// /// 设置透明度 /// /// /// 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(); } /// /// 初始化界面风格 /// void WindowAppPouNavView::initStyle() { // 隐藏横纵向两个滚动条 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 设置背景色 setStyleSheet("background-color: rgba(10, 10, 10, 128);" "border-radius: 3px;"); } /// /// 绑定主视图 /// /// void WindowAppPouNavView::setMainView(QGraphicsView *mainView) { m_mainView = mainView; } /// /// 设置透明度 /// /// /// void WindowAppPouNavView::setOpacity(qreal opacity, bool animated) { m_opacityHelper->setOpacity(opacity, animated); } /// /// 刷新界面坐标(暂未使用) /// void WindowAppPouNavView::updateMainViewportRegion() { if (m_mainView != nullptr) { m_viewportRegion = mapFromScene(m_mainView->mapToScene(m_mainView->rect())); update(); } } /// /// 鼠标左键点在鸟瞰图时,设置Pou界面随动 /// /// void WindowAppPouNavView::mousePressEvent(QMouseEvent *event) { m_mouseDown = true; if (m_mainView) { m_mainView->centerOn(mapToScene(event->pos())); update(); } event->accept(); } /// /// 鼠标移动时,设置Pou界面随动 /// /// void WindowAppPouNavView::mouseMoveEvent(QMouseEvent *event) { if (m_mouseDown && m_mainView) { m_mainView->centerOn(mapToScene(event->pos())); update(); event->accept(); } else { event->ignore(); } } /// /// 退出Pou视图的随动状态 /// /// void WindowAppPouNavView::mouseReleaseEvent(QMouseEvent *event) { m_mouseDown = false; event->accept(); } /// /// 忽略滚轮消息 /// /// void WindowAppPouNavView::wheelEvent(QWheelEvent *event) { event->ignore(); return QGraphicsView::wheelEvent(event); } /// /// 绘制预览窗口边框 /// /// void WindowAppPouNavView::paintEvent(QPaintEvent *event) { QGraphicsView::paintEvent(event); QPainter painter(viewport()); painter.setPen(QPen(Qt::gray, 1)); painter.drawRect(m_viewportRegion.boundingRect()); }