Qt 导航器

目录

功能 

效果图

代码


 

功能 

  • 导航器支持实时渲染界面内容
  • 快速定位窗口位置
  • 控制窗口缩放
  • 导航器与窗口显示区域的联动

效果图

 

 

代码 


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();

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值