QPen 的使用是装饰性的,但宽度不为零

Posted

技术标签:

【中文标题】QPen 的使用是装饰性的,但宽度不为零【英文标题】:Usage of QPen which is cosmetic but not width zero 【发布时间】:2019-04-17 09:32:24 【问题描述】:

我最近将一个应用程序从 Qt 4 迁移到 Qt 5。我曾经使用默认的 QPen(),宽度为零,因此很美观。迁移后,我无法将其保留为默认值(默认笔已更改为宽度 1,因此不是装饰性的)。所以我只是给setCosmetic(True)添加了一个电话,所以我的笔是化妆品但宽度为1。

但是,这导致了一些(对我而言)意想不到的行为。特别是我有一些QGraphicsEllipseItem 对象给出了不正确的选择行为:具体来说,一个非常小的椭圆,放大到一个大尺寸,将有一个比绘制时大得多的shape()。它是用化妆笔(1 像素)绘制的,但形状是按照放大 1 号的笔来计算的。

这很容易解决:我只是将 QPen 宽度设置为 0。但它在我的脑海中提出了一个问题。

非零宽度的化妆笔的预期语义是什么? QGraphicsEllipseItem 的这种行为是有意的,并且具有有用的应用程序,还是出乎意料?

【问题讨论】:

【参考方案1】:

查看QGraphicsItem::paint()的文档:

QGraphicsItem 不支持使用宽度非零的化妆笔。

【讨论】:

啊有趣-谢谢。我想知道为什么 QPen 允许它们。

以上是关于QPen 的使用是装饰性的,但宽度不为零的主要内容,如果未能解决你的问题,请参考以下文章

是否可以绑定到装饰元素容器上的属性?

ES2017 NEST JS @IsEmpty 在作为表达式调用时无法解析属性装饰器的签名。此表达式不可调用。不为空

使用装饰器作为类来装饰 Python 类

Python之装饰器

验证装饰器不会在动画中完全消失

CLLocation 不为零,但尝试将其打印出来会抛出 EXC_BAD_ACCESS