在QGraphicsScene中加入QWidget后,在视图中进行划线,该线会超出视图边界,或者显示有问题
时间: 2023-07-15 08:15:54 浏览: 87
这是因为在QGraphicsScene中加入QWidget时,QWidget会被自动转换为QGraphicsProxyWidget(QGraphicsWidget的子类),而QGraphicsProxyWidget默认会忽略其子对象的大小限制,而是将其大小设置为无限制。因此,在视图中进行划线时,线条会超出视图边界。
要解决这个问题,可以通过以下两种方法之一:
1. 将QGraphicsProxyWidget的大小限制设置为QWidget的大小:
```python
widget = QWidget()
# 设置widget的大小
widget.setFixedSize(200, 200)
proxy = QGraphicsProxyWidget()
proxy.setWidget(widget)
# 设置proxy的大小为widget的大小
proxy.setFixedSize(widget.size())
scene.addItem(proxy)
```
2. 将QGraphicsItem的剪切区域设置为视图区域:
```python
widget = QWidget()
proxy = QGraphicsProxyWidget()
proxy.setWidget(widget)
scene.addItem(proxy)
# 获取视图区域
view_rect = view.viewport().rect()
# 将QGraphicsItem的剪切区域设置为视图区域
proxy.setClipRect(view_rect)
```
这样,在视图中进行划线时,就不会超出视图边界了。
阅读全文