qtは、スクロールホイールを使用して、マウスを中心ズームとしてscrollAreaを制御します。

1 QAbstractScrollAreaクラスのwheelEvent関数をオーバーライドして、何もしないようにします

void QAbstractScrollArea::wheelEvent(QWheelEvent *event)
{
    
    
	return;
}

2QScrollAreaでQlabelの拡大と縮小を実現します

void OpenAndSplicingWindow::wheelEvent(QWheelEvent *event)
{
    
    
	ui->label->setMinimumSize(0, 0);
	ui->label->setMaximumSize(2048, 2048);
	QRect tmp = ui->label->geometry();

	int adjustSize = 20;//改变的尺寸

	//如果滚轮向上滑动,且鼠标位置在scrollArea里面
	if (event->delta() > 0 && tmp.contains(event->pos()))
	{
    
    
		tmp.setWidth(tmp.width() + adjustSize);
		tmp.setHeight(tmp.height() + adjustSize);
		ui->lb_Screen->setFixedSize(tmp.width(), tmp.height());
	}
	if (event->delta() < 0 && tmp.contains(event->pos()))
	{
    
    
		tmp.setWidth(tmp.width() - adjustSize);
		tmp.setHeight(tmp.height() - adjustSize);
		ui->lb_Screen->setFixedSize(tmp.width(), tmp.height());
	}

	//重新定位滚动条为鼠标位置
	QScrollBar *tmph = ui->scrollArea->horizontalScrollBar();
	QScrollBar *tmpv = ui->scrollArea->verticalScrollBar();
	QPoint pos = event->pos();
	tmph->setValue(pos.x());
	tmpv->setValue(pos.y());
}

おすすめ

転載: blog.csdn.net/Fengfgg/article/details/113395003