缩放视图矩形时防止缩放项目
我正在使用 Qt 的 QGraphicsView 和 QGraphicsItem 子类。
当视图矩形发生更改(例如放大时)时,有没有办法不缩放视图中项目的图形表示形式。默认行为是我的项目相对于我的视图矩形进行缩放。
我想可视化二维点,这些点应该由一个细矩形表示,在放大视图时不应缩放。 请参阅典型的 3D 建模软件作为参考,其中顶点始终以相同的大小显示。
I am using Qt's QGraphicsView
— and QGraphicsItem
— subclasses.
Is there a way to not scale the graphical representation of the item in the view when the view rectangle is changed, e.g., when zooming in. The default behavior is that my items scale in relation to my view rectangle.
I would like to visualize 2d points which should be represented by a thin rectangle which should not scale when zooming in the view. See a typical 3d modelling software for reference, where vertex points are always shown at the same size.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
将
QGraphicItem
的标志QGraphicsItem::ItemIgnoresTransformations
设置为true对您不起作用?Set the
QGraphicItem
's flagQGraphicsItem::ItemIgnoresTransformations
to true does not work for you?扩展 QGraphicsItem 类,重写
paint()
。在
paint()
内,将变换的缩放因子重置为 1(即m11
和m22
),并保存m11<重置之前的 /code> (x 缩放因子)和
m22
(y 缩放因子)。然后,像平常一样进行绘制,但将 x 乘以
m11
,将 y 乘以m22
。 这避免了使用默认变换进行绘制,而是根据场景的变换显式计算位置。以下代码块使用默认转换进行绘制:
您可以尝试两者以查看差异。
Extend a QGraphicsItem class, override
paint()
.Inside the
paint()
, reset the transformation's scaling factor to 1 (which arem11
andm22
), and save them11
(x scaling factor) andm22
(y scaling factor) before the reset.Then, draw like you would normally do, but multiply your x with
m11
and y withm22
. This avoids drawing with the default transformation, but explicitly calculates the positions according to the scene's transformation.The following code block is drawing with default transformation:
You can try both to see the difference.
怎么样:
正如您所看到的,文本已放大,但矩形并未放大。 请注意,这不仅会阻止矩形的缩放,还会阻止其他变换。
How about this:
As you can see the text is scaled up but the rectangle is not. Note that this does not only prevent the scaling for the rectangle but and other transformation.
以下解决方案非常适合我:
我们还可以将
scaleValue
乘以其他度量,我们希望在保存/恢复环境之外保持其大小恒定。The following solution worked perfectly for me:
We can also multiply the
scaleValue
by other measures, we want to keep its size constant outside the save/restore environment.我发现如果我派生一个新类并重新实现绘制函数,我可以这样做:
I found that if I derive a new class and reimplement the paint function, I can do: