#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() { } /// /// 初始化界面风格 /// 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;" ); } /// /// 绑定主视图 /// /// void WindowAppUiNavView::setMainView(QGraphicsView* mainView) { m_mainView = mainView; } /// /// 刷新界面坐标 /// void WindowAppUiNavView::updateMainViewportRegion() { if (m_mainView != nullptr) { m_viewportRegion = mapFromScene(m_mainView->mapToScene(m_mainView->rect())); update(); } } /// /// 鼠标左键点在鸟瞰图时,设置Pou界面随动 /// /// void WindowAppUiNavView::mousePressEvent(QMouseEvent* event) { m_mouseDown = true; if (m_mainView) { m_mainView->centerOn(mapToScene(event->pos())); update(); } event->accept(); } /// /// 鼠标移动时,设置Pou界面随动 /// /// void WindowAppUiNavView::mouseMoveEvent(QMouseEvent* event) { if (m_mouseDown && m_mainView) { m_mainView->centerOn(mapToScene(event->pos())); update(); event->accept(); } else { event->ignore(); } } /// /// 退出Pou视图的随动状态 /// /// void WindowAppUiNavView::mouseReleaseEvent(QMouseEvent* event) { m_mouseDown = false; event->accept(); } /// /// 忽略滚轮消息 /// /// void WindowAppUiNavView::wheelEvent(QWheelEvent* event) { event->ignore(); return QGraphicsView::wheelEvent(event); } ///// ///// 处理缩放消息,固定宽高比 ///// ///// //void WindowAppUiNavView::resizeEvent(QResizeEvent* resizeEvent) //{ // //int nWidth = resizeEvent->size().width(); // // //this->setFixedHeight(nWidth * HEIGHT_SCALE); //} /// /// 绘制预览窗口边框 /// /// 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); }