本文介绍了放大/缩小鼠标点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如图所示。
我在QScrollArea中有QWidget。QWidget作为细胞图像和一些基于矢量的轮廓数据的渲染小部件。用户可以进行放大和缩小,简单的情况是,它会相应地更改QPaint的比例和QWidget的大小。
现在我想对鼠标下方的点执行放大/缩小。(类似于GIMP中的缩放操作)。如何根据缩放级别计算滚动条的新位置?使用转换而不使用Scrolarea实现此操作是否更好?
推荐答案
一种解决方案可以是从QScrollArea派生一个新类,然后重新实现wheelEvent
,以便使用鼠标滚轮在当前鼠标光标位置执行缩放。
此方法通过相应调整滚动条位置来反映新的缩放级别。这意味着只要没有可见的滚动条,就不会在鼠标光标位置下进行缩放。这是大多数图像查看器应用程序的行为。
void wheelEvent(QWheelEvent* e) {
double OldScale = ... // Get old scale factor
double NewScale = ... // Set new scale, use QWheelEvent...
QPointF ScrollbarPos = QPointF(horizontalScrollBar()->value(), verticalScrollBar()->value());
QPointF DeltaToPos = e->posF() / OldScale - widget()->pos() / OldScale;
QPointF Delta = DeltaToPos * NewScale - DeltaToPos * OldScale;
widget()->resize(/* Resize according to new scale factor */);
horizontalScrollBar()->setValue(ScrollbarPos.x() + Delta.x());
verticalScrollBar()->setValue(ScrollbarPos.y() + Delta.y());
}
这篇关于放大/缩小鼠标点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!