目录
功能
- 导航器支持实时渲染界面内容
- 快速定位窗口位置
- 控制窗口缩放
- 导航器与窗口显示区域的联动
效果图
代码
void PriviewNavigator::mouseMoveEvent(QMouseEvent *event)
{
QPoint p = event->pos();
m_viewPos.setX(p.x() - m_pdis.x());
m_viewPos.setY(p.y() - m_pdis.y());
float xs = 0 - 1.0 * m_viewPos.x() / 400 * m_canvasRect.width();
float ys = 0 - 1.0 * m_viewPos.y() / 300 * m_canvasRect.height();
Updatecanvas(QPoint(xs, ys));
update();
}
void PriviewNavigator::loadImage(const QPixmap &pixmap)
{
QPixmap tmpPix = ChangeQImageBackTransparency(pixmap);
m_image = tmpPix.toImage().scaled(width(), height());
update();
}
//将QImage转化为半透明的效果
QPixmap PriviewNavigator::ChangeQImageBackTransparency(const QPixmap &pix)
{
QPixmap tmpPix(pix.size());
tmpPix.fill(Qt::transparent);
QPainter p1(&tmpPix);
p1.setCompositionMode(QPainter::CompositionMode_Source);
p1.drawPixmap(0, 0, pix);
p1.setCompositionMode(QPainter::CompositionMode_DestinationIn);
//200表示透明度,数值0表示完全透明,数值255表示不透明
p1.fillRect(tmpPix.rect(), QColor(145, 178, 113, 100));
p1.end();
return tmpPix;
}
void PriviewNavigator::setScaledSize(QRect viewrect, QRect canvasRect, QSize viewSize, QSize canvasSize)
{
m_viewrect = viewrect;
m_canvasRect = canvasRect;
int vx = viewrect.x() - canvasRect.x();
int vy = viewrect.y() - canvasRect.y();
int iws = canvasRect.width();
int ihs = canvasRect.height();
float scaledx = 1.0 *vx / iws;
float scaledy = 1.0 *vy / ihs;
float scaledw = 1.0 *viewSize.width() / canvasSize.width();
float scaledh = 1.0 *viewSize.height() / canvasSize.height();
m_viewSize = QSize(1.0 * 400 * scaledw, 1.0 * 300 * scaledh);
m_viewPos = QPoint(400 * (scaledx), 300 * (scaledy));
m_scaled = m_viewSize.width() / m_viewSize.height();
update();
}
void PriviewNavigator::onenlargeButtonClicked()
{
QPoint point = QPoint(m_viewPos.x() + 1.0 * m_viewSize.width() / 2, m_viewPos.y() + 1.0 * m_viewSize.height() / 2);
QPoint pointMid = QPoint(1.0 * point.x() / 400 * m_canvasRect.width(), 1.0 * point.y() / 300 * m_canvasRect.height());
UpdatecanvasSize(0, pointMid);
update();
}
void PriviewNavigator::onenarrowButtonClicked()
{
QPoint point = QPoint(m_viewPos.x() + 1.0 * m_viewSize.width() / 2, m_viewPos.y() + 1.0 * m_viewSize.height() / 2);
QPoint pointMid = QPoint(1.0 * point.x() / 400 * m_canvasRect.width(), 1.0 * point.y() / 300 * m_canvasRect.height());
UpdatecanvasSize(1, pointMid);
update();
}