qraphicsItem 立体边框
时间: 2023-10-27 09:04:30 浏览: 72
QGraphicsItem可以通过设置边框线条的宽度和颜色来实现立体边框的效果。同时,可以通过设置item的Z值来控制其在场景中的前后顺序,从而实现立体效果。
以下是一个简单的示例代码,演示如何设置立体边框:
```python
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QPen
from PyQt5.QtWidgets import QGraphicsItem
class MyItem(QGraphicsItem):
def __init__(self):
super().__init__()
self.width = 100
self.height = 100
self.color = QColor(200, 200, 200)
self.border_color = QColor(50, 50, 50)
self.pen_width = 2
self.setZValue(1) # 设置Z值为1,使其显示在其他item的前面
def boundingRect(self):
return QRectF(-self.width / 2, -self.height / 2, self.width, self.height)
def paint(self, painter, option, widget):
# 绘制填充区域
painter.setBrush(self.color)
painter.drawRect(-self.width / 2, -self.height / 2, self.width, self.height)
# 绘制立体边框
pen = QPen(self.border_color, self.pen_width, Qt.SolidLine)
painter.setPen(pen)
# 绘制左侧面
painter.drawLine(-self.width / 2, -self.height / 2, -self.width / 2, self.height / 2)
painter.drawLine(-self.width / 2, -self.height / 2, self.width / 2 - self.pen_width, -self.height / 2)
painter.drawLine(-self.width / 2, self.height / 2, self.width / 2 - self.pen_width, self.height / 2)
# 绘制顶部面
painter.drawLine(-self.width / 2, -self.height / 2, self.width / 2 - self.pen_width, -self.height / 2)
painter.drawLine(self.width / 2, -self.height / 2, self.width / 2, self.height / 2)
painter.drawLine(-self.width / 2, -self.height / 2, self.width / 2 - self.pen_width, -self.height / 2)
# 绘制右侧面
painter.drawLine(self.width / 2, -self.height / 2, self.width / 2, self.height / 2)
painter.drawLine(self.width / 2 - self.pen_width, -self.height / 2, self.width / 2 - self.pen_width, self.height / 2)
painter.drawLine(self.width / 2, self.height / 2, self.width / 2 - self.pen_width, self.height / 2)
# 绘制底部面
painter.drawLine(-self.width / 2, self.height / 2, self.width / 2 - self.pen_width, self.height / 2)
painter.drawLine(self.width / 2, -self.height / 2, self.width / 2, self.height / 2)
painter.drawLine(-self.width / 2, self.height / 2, self.width / 2 - self.pen_width, self.height / 2)
```
在上述代码中,我们通过重载`boundingRect()`方法来定义我们的item所占用的矩形区域,然后在`paint()`方法中绘制我们的item。我们首先绘制填充区域,然后绘制四个面的线条,从而形成立体边框的效果。通过设置`QPen`的宽度和颜色,可以控制线条的粗细和颜色。最后,我们通过设置item的Z值来使其显示在其他item的前面,从而实现立体效果。
阅读全文