123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- #include "WindowAppUiNavView.h"
- #include "CommonDraw.h"
- //
- //// 缩略图界面的宽高比
- //#define HEIGHT_SCALE 0.75
- // 固定UI缩略图高度
- #define FIXED_HEIGHT 200
- WindowAppUiNavView::WindowAppUiNavView(QWidget*parent)
- : QGraphicsView(parent)
- , m_mainView(nullptr)
- , m_mouseDown(false)
- , m_viewportRegion(this->rect())
- {
- // 初始化界面风格
- initStyle();
- }
- WindowAppUiNavView::~WindowAppUiNavView()
- {
- }
- /// <summary>
- /// 初始化界面风格
- /// </summary>
- void WindowAppUiNavView::initStyle()
- {
- // 固定高度
- this->setFixedHeight(FIXED_HEIGHT);
- // 与Scene一起设置为居中对齐
- this->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- // 隐藏横纵向两个滚动条
- setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- // 设置背景色
- setStyleSheet(
- "background-color: rgb(61,61,61);"
- "border-radius: 3px;"
- );
- }
- /// <summary>
- /// 绑定主视图
- /// </summary>
- /// <param name="mainView"></param>
- void WindowAppUiNavView::setMainView(QGraphicsView* mainView)
- {
- m_mainView = mainView;
- }
- /// <summary>
- /// 刷新界面坐标
- /// </summary>
- void WindowAppUiNavView::updateMainViewportRegion()
- {
- if (m_mainView != nullptr)
- {
- m_viewportRegion = mapFromScene(m_mainView->mapToScene(m_mainView->rect()));
- update();
- }
- }
- /// <summary>
- /// 鼠标左键点在鸟瞰图时,设置Pou界面随动
- /// </summary>
- /// <param name="event"></param>
- void WindowAppUiNavView::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 WindowAppUiNavView::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 WindowAppUiNavView::mouseReleaseEvent(QMouseEvent* event)
- {
- m_mouseDown = false;
- event->accept();
- }
- /// <summary>
- /// 忽略滚轮消息
- /// </summary>
- /// <param name="event"></param>
- void WindowAppUiNavView::wheelEvent(QWheelEvent* event)
- {
- event->ignore();
- return QGraphicsView::wheelEvent(event);
- }
- ///// <summary>
- ///// 处理缩放消息,固定宽高比
- ///// </summary>
- ///// <param name="resizeEvent"></param>
- //void WindowAppUiNavView::resizeEvent(QResizeEvent* resizeEvent)
- //{
- // //int nWidth = resizeEvent->size().width();
- //
- // //this->setFixedHeight(nWidth * HEIGHT_SCALE);
- //}
- /// <summary>
- /// 绘制预览窗口边框
- /// </summary>
- /// <param name="event"></param>
- void WindowAppUiNavView::paintEvent(QPaintEvent* event)
- {
- int x = (width() / 2) - (m_viewportRegion.boundingRect().width() / 2);
- QRect rect = m_viewportRegion.boundingRect();
- rect.moveLeft(x);
- QPainter painter(viewport());
- painter.setPen(QPen(Qt::gray, 1));
- painter.drawRect(rect);
- // 计算坐标
- int nTop = rect.top() ;
- int nWwidth = rect.width();
- int nHeight = rect.height() ;
- int nStepW = (nWwidth) / 3 ;
- int nStepH = (nHeight ) / 3;
- painter.setPen(UI_LINE_BK_PEN);
-
- // 画两条横线
- painter.drawLine(QLine(x, nStepH, nWwidth + x, nStepH));
- painter.drawLine(QLine(x, nStepH * 2, nWwidth + x , nStepH * 2));
- // 画两条竖线
- painter.drawLine(QLine(nStepW + x, nTop, nStepW + x, nHeight));
- painter.drawLine(QLine(nStepW * 2 + x, nTop, nStepW * 2 + x, nHeight));
- QGraphicsView::paintEvent(event);
- }
|