PySide:在自定义QGraphicsObject中调用QPainter.drawRect()时的奇怪对角线

时间:2013-09-18 00:59:47

标签: paint pyside qpainter

我有QGraphicsObject个自定义paint()方法,显示在窗口太小而无法完整显示。当我使用底部滚动条滚动时,paint.drawRect()绘制一个三角形,而不是像它那样绘制一个矩形。

这似乎只有在我一直滚动到左下角时才会发生 - 没有其他角落受到影响。如果我最大化窗口并将其恢复到原始大小,那么再试一次,它可以正常工作,不会出现对角线。

Screenshot

我有一些测试代码here。按+和 - 键分别放大和缩小。

我很沮丧。这是一个错误,还是我错过了什么?我该怎么做才能解决这个问题?

我正在使用PySide 1.2.1,Python 3.3.2和Windows 8。

1 个答案:

答案 0 :(得分:0)

我经历过运行Qt示例"弹性节点",这是图形视图示例之一。您可以通过放大(使用' +'或鼠标滚轮)重现对角线,直到框架矩形位于可见区域之外。

解决方法:停用后台缓存(graphwidget.cpp,构造函数,删除行" setCacheMode(CacheBackground);"),compile,run =>没有对角线。

顺便说一下,我使用的是Qt 4.8.5。

我刚看了Qt bug跟踪器并找到了QTBUG-31579,当使用笔宽为0时会绘制出意想不到的东西,所以我尝试通过用明确的笔1来绘制矩形来修改弹性节点示例pt width,即使启用了后台缓存,也能获得预期的结果。由于它似乎正在解决这个问题,所以应该在下一个Qt版本中解决它。

Sorbet,如果你需要更快的解决方案,你可以尝试在绘图时设置一个非零的显式笔。

希望这适合你。