我正在创建一个用户界面,其中一个较大的矩形内有一个移动的正方形。矩形内部会有一个圆
QGraphicsEllipseItem
。该正方形被实现为 QGraphicsRectItem
。当正方形与圆形重叠时,我想将圆形的重叠部分绘制为绿色(并在正方形的后续移动中保持绿色,同时也绘制发生的任何新重叠)。
到目前为止,我主要使用按钮和标签来显示我需要的所有内容,但为此(如果我是正确的)我需要重写绘制方法。我发现了这个:Color the area Defined by Items junction in Qt问题似乎做了我想要的事情,但是对画家的调用让我感到困惑。
目前我有一个在
on_start_button_clicked()
函数内部调用的函数,其中还创建了场景并添加了正方形和圆形。
void MainWindow::paintOver(int xpos, int ypos, QGraphicsRectItem *square, QGraphicsEllipseItem * circle)
{
QPainter painter(ui->graphicsView);
square->setPos(xpos,ypos);
QPainterPath intersectedPath = square->shape().intersected(circle->shape());
painter.setBrush(QColor(0,255,0));
painter.drawPath(intersectedPath);
}
我假设我声明画家对象的方式不正确,因为它返回以下错误:
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setBrush: Painter not active
QPainter::drawPath: Painter not active
我尝试为圆圈编写特定的
paintEvent
覆盖,但似乎 QGraphicsItems
没有 paintEvent
功能。 GraphicsView 可能有点矫枉过正,因为我只想显示这两个形状,但不幸的是我对 Qt 总体来说还很陌生,并且希望得到任何建议。