【问题标题】:How to make qt qgraphicsview scale to not affect stipple pattern?如何使 qt qgraphicsview 缩放不影响点画图案?
【发布时间】:2012-12-07 03:49:31
【问题描述】:

我在 QGraphicsView 内画了几个矩形;我通过用我的QPixmap 创建一个QBrush 来为这些使用自定义点画图案。这将按预期以默认缩放级别显示。

当我调用view->scale() 时,矩形显示得更大或更小,正如我预期的那样。然而,Qt 已经对点画图案的各个位进行了缩放,这是意料之中的;我希望它用画笔再次绘制更大或更小的矩形。 例如。 如果我使用具有一个像素点和像素空间的点画图案,放大后,我想看到一个更大的矩形,但我想要具有相同像素间隙的相同点画图案。这是否可以以某种方式实现?谢谢。

【问题讨论】:

    标签: qt qgraphicsview qpixmap


    【解决方案1】:

    你可以使用 QPen::setDashOffset:

    http://harmattan-dev.nokia.com/docs/library/html/qt4/qpen.html#setDashOffset

    您需要根据场景缩放/缩放级别设置偏移量。您可以通过调用 scene() 来获取指向项目中场景的指针,但不要忘记检查 NULL,因为它在未添加到场景时将为 NULL(尽管理论上您不应该得到一个 paint()不在场景中时)。

    另一个选项是使用:

    http://doc.qt.digia.com/qt/qpainter.html#scale

    撤消在您的画家上缩放的视图。

    【讨论】:

    • 感谢您的回复。我想我没有解释清楚。我希望矩形的大小可以缩放,但点画图案保持不变。
    • 使用 setDashOffset 应该达到这个结果,例如在 100% 时,破折号偏移量可能为 1,所以在 50% 时,您可以将其更改为 0.5,并且模式应该看起来相同(但矩形将是两倍一样小)。
    • 我正在使用 QBrush 设置点画图案。我在画笔中寻找 *Offset 方法。看不到。
    【解决方案2】:

    我在 Qt 中开发 EDA 工具伴侣时遇到了同样的问题。

    经过一番尝试,我所做的(并且似乎对我有用)是创建一个自定义图形项。关于paint方法,我这样做:

    QBrush newBrush = brush_with_pattern;
    newBrush.setTransform(QTransform(painter->worldTransform().inverted()));
    painter->setBrush(newBrush);
    

    也就是将项目的逆变换应用到画笔上(所以它不会缩放)。

    我认为 setDashOffset 仅用于形状的边框(不是填充)。

    【讨论】:

    • 设置ItemIgnoresTransformations不一样吗?
    【解决方案3】:

    如果有人还在关注这个问题,a related question here 关于标准填充模式而不是像素图填充模式的缩放可能会有所帮助。基本上,可能无法修改标准填充图案的缩放比例(列出了一些解决方法),但是,如果您正在寻找不同的颜色,尤其是灰度级,使用 alpha 值会产生所需的效果 - 而且要少得多令人费解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      相关资源
      最近更新 更多