在Qt中使用Painter绘制2个QGraphicsItems的交集

问题描述 投票:0回答:0

我正在创建一个用户界面,其中一个较大的矩形内有一个移动的正方形。矩形内部会有一个圆

QGraphicsEllipseItem
。该正方形被实现为
QGraphicsRectItem
。当正方形与圆形重叠时,我想将圆形的重叠部分绘制为绿色(并在正方形的后续移动中保持绿色,同时也绘制发生的任何新重叠)。 This image is essentially how I want it to work

到目前为止,我主要使用按钮和标签来显示我需要的所有内容,但为此(如果我是正确的)我需要重写绘制方法。我发现了这个: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 总体来说还很陌生,并且希望得到任何建议。

c++ qt qgraphicsitem qpainter
© www.soinside.com 2019 - 2024. All rights reserved.