qt 使用滚轮控制scrollArea 已鼠标为中心缩放

1重写 QAbstractScrollArea 类的wheelEvent函数,让它什么都不要做

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

2 实现QScrollArea里面的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());
}
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中,如果要实现使用滚轮缩放Label的大小,当Label的大小过大时,会出现滚动条。 首先,需要将Label放置在一个可以滚动的窗口控件内,例如QScrollArea。可以通过如下代码创建一个QScrollArea控件,并将Label放置在其中: ```cpp QScrollArea *scrollArea = new QScrollArea; QWidget *widget = new QWidget; QVBoxLayout *layout = new QVBoxLayout; QLabel *label = new QLabel("文本内容"); label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); // 设置Label的大小策略为可调整大小 layout->addWidget(label); widget->setLayout(layout); scrollArea->setWidget(widget); scrollArea->setWidgetResizable(true); // 设置滚动区域可以调整大小 scrollArea->show(); ``` 接下来,我们可以通过重写QLabel的wheelEvent事件来实现滚轮缩放Label的功能。在wheelEvent中,可以根据鼠标滚轮的滚动方向来改变Label的大小,同时重新计算滚动区域的大小,以确保Label的完整显示。下面是一个示例代码: ```cpp void QLabel::wheelEvent(QWheelEvent *event) { int delta = event->angleDelta().y(); QSize labelSize = size(); // 根据滚动方向来调整大小 if (delta > 0) { labelSize *= 1.1; // 缩放因子,可以根据需要自行调整 } else { labelSize *= 0.9; } setFixedSize(labelSize); // 重新计算滚动区域大小 QScrollArea *scrollArea = qobject_cast<QScrollArea*>(parentWidget()); if (scrollArea) { QWidget *widget = scrollArea->widget(); widget->adjustSize(); scrollArea->setWidgetResizable(true); } event->accept(); } ``` 通过以上代码,当鼠标滚轮滚动时,Label的大小会相应地增加或减小,并更新滚动区域的大小,确保Label的完整显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值