#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);
}