gpt4 book ai didi

qt - 在鼠标点上放大/缩小?

转载 作者:行者123 更新时间:2023-12-04 12:59:00 29 4
gpt4 key购买 nike

如图所示。 alt text

alt text

我在 QScrollArea 中有 QWidget。QWidget 充​​当细胞图像和一些基于矢量的轮廓数据的渲染小部件。用户可以执行放大/缩小操作,简单地发生的是,它改变了 QPainters 的比例并相应地改变了 QWidget 的大小。

现在我想对鼠标下的点进行放大/缩小。 (就像 GIMP 中的缩放 Action )。如何根据缩放级别计算滚动条的新位置?在不使用 scrollarea 的情况下使用转换来实现它是否更好?

最佳答案

一个解决方案可能是从 QScrollArea 派生一个新类并重新实现 wheelEvent,以便使用鼠标滚轮和当前鼠标光标位置执行缩放。

此方法的工作原理是相应地调整滚动条位置以反射(reflect)新的缩放级别。这意味着只要没有可见的滚动条,就不会在鼠标光标位置下进行缩放。这是大多数图像查看器应用程序的行为。

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

关于qt - 在鼠标点上放大/缩小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3725342/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com