QGraphicsItem 类的 paint()函数 重绘图元时的坐标轴
时间: 2024-10-20 13:06:42 浏览: 17
`QGraphicsItem` 类是 Qt Graphics 软件框架中的核心组件,它代表了一个可以在图形视图中绘制的基本元素,如图形、文本、形状等。`paint()` 函数是一个纯虚函数,其作用是在图形设备上重绘 `QGraphicsItem` 的外观。当需要更新或者显示图形时,这个函数会被自动调用。
当你覆盖 `paint()` 函数时,你需要提供自定义的绘画逻辑。其中涉及到坐标系统的关键在于传递给 `paint()` 函数的参数 ` QPainter` 和 `QStyleOptionGraphicsItem`。`QPainter` 提供了画刷、颜色和其他绘图工具,而 `QStyleOptionGraphicsItem` 包含了一些关于要渲染的图形信息,比如位置、大小、边框样式等。
当调用 `paint()` 函数时,通常先设置画布的坐标系到 `QGraphicsItem` 的本地坐标系统,这通常是相对于 `QGraphicsScene` 或者 `QGraphicsView` 来说的。然后,你可以在 `painter.translate(x, y)` 中传入坐标值(x, y)将画布转换到所需的全局坐标位置。
例如:
```cpp
void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)
{
painter->save();
painter->translate(option->pos); // 使用 option 中的位置信息来定位
// ... 你的绘画代码
painter->restore(); // 确保在完成绘画后恢复原始坐标
}
```
这里的 `option->pos` 就是 `QGraphicsItem` 的本地坐标,将其传递给 `translate()` 可以确保在正确的坐标下绘制。
阅读全文