Qt 如何使用QPaint创建一侧圆形和另一侧扁平矩形?

Qt 如何使用QPaint创建一侧圆形和另一侧扁平矩形?,qt,qtwidgets,Qt,Qtwidgets,我想使用QPainter实现类似的功能 我尝试在QPainter中并排使用2个圆形矩形,但无法获得上面的图像 QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QRectF leftRect= QRectF(0, 0, 300, 150); QRectF rightRect= QRectF(300, 0, 300, 150); painter.fillRect(le

我想使用QPainter实现类似的功能

我尝试在QPainter中并排使用2个圆形矩形,但无法获得上面的图像

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QRectF leftRect= QRectF(0, 0, 300, 150);
    QRectF rightRect= QRectF(300, 0, 300, 150);
    painter.fillRect(leftRect, QColor("black");
    painter.drawRoundedRect(leftRect,15,35);
    painter.setPen(QPen("white"));
    painter.setPen(QPen("black"));
    painter.fillRect(rightRect, QColor("white");
    painter.drawRoundedRect(rightRect,15,35);    
这就是我试过的结果

我用QPainterPath试过这个

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QRectF leftRect= QRectF(0, 0, 300, 150);
QRectF rightRect= QRectF(300, 0, 300, 150);
QPainterPath path;
path.setFillRule(Qt::WindingFill);
path.addRoundedRect(leftRect, 15, 35);
QPen pen(Qt::white, 1);
painter.setPen(pen);
painter.fillPath(path, Qt::black);
painter.drawPath(path);

QPainterPath path2;
path2.setFillRule(Qt::WindingFill);
QPen pen1(Qt::black, 1);
painter.setPen(pen1);
path2.addRoundedRect(rightRect, 15, 35);

painter.fillPath(path2, Qt::white);
painter.drawPath(path2);  
得到这个:

在这方面,Qt最好能提供单独的x和y圆角半径。因此,没有什么能为你做到这一点

获取该几何体的方法似乎是使用
QPainterPath
从几个子组件组成形状,在本例中,半径为圆弧,其余为3条线

你应该能够翻译和镜像画家画的另一面。因此,您可以填充并勾勒左侧,然后翻转画师并勾勒右侧

另外,如果你正在画一些东西,比如说一个进度条,那么还有另一个过程。您将绘制一个规则的圆角矩形并将其用作遮罩,然后您可以通过绘制一个规则矩形来填充所需的量,该矩形将被遮罩剪裁成所需的形状

好的,看起来您需要一些额外的帮助,下面是一些可以调整的工作代码:

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QPainterPath path;

    // compose the "half"
    path.moveTo(20, 0);
    path.lineTo(100, 0);
    path.lineTo(100, 40);
    path.lineTo(20, 40);
    path.arcTo(0, 0, 40, 40, -90, -180);

    // draw black half
    painter.setBrush(Qt::black);
    painter.setPen(QPen(Qt::black, 1));
    painter.drawPath(path);

    // mirror and reposition the painter
    QTransform mirror(-1, 0, 0, 0, 1, 0, 0, 0, 1);
    painter.setTransform(mirror);
    painter.translate(-200, 0);

    // draw white half
    painter.setBrush(Qt::white);
    painter.drawPath(path);

在这方面,Qt最好提供单独的x和y圆角半径。因此,没有什么能为你做到这一点

获取该几何体的方法似乎是使用
QPainterPath
从几个子组件组成形状,在本例中,半径为圆弧,其余为3条线

你应该能够翻译和镜像画家画的另一面。因此,您可以填充并勾勒左侧,然后翻转画师并勾勒右侧

另外,如果你正在画一些东西,比如说一个进度条,那么还有另一个过程。您将绘制一个规则的圆角矩形并将其用作遮罩,然后您可以通过绘制一个规则矩形来填充所需的量,该矩形将被遮罩剪裁成所需的形状

好的,看起来您需要一些额外的帮助,下面是一些可以调整的工作代码:

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QPainterPath path;

    // compose the "half"
    path.moveTo(20, 0);
    path.lineTo(100, 0);
    path.lineTo(100, 40);
    path.lineTo(20, 40);
    path.arcTo(0, 0, 40, 40, -90, -180);

    // draw black half
    painter.setBrush(Qt::black);
    painter.setPen(QPen(Qt::black, 1));
    painter.drawPath(path);

    // mirror and reposition the painter
    QTransform mirror(-1, 0, 0, 0, 1, 0, 0, 0, 1);
    painter.setTransform(mirror);
    painter.translate(-200, 0);

    // draw white half
    painter.setBrush(Qt::white);
    painter.drawPath(path);

两边需要圆角还是半圆?是的,它是两个并排的矩形。一边是圆的,另一边是平的你需要圆角还是两边各有一个半圆?是的,它是两个并排的矩形。一边是圆的,另一边是平的,您可以在do-so中显示示例工作代码。因为我尝试使用QPainterPath。它没有正确地呈现问题中的代码和结果,以查看出了什么问题。能否在“这样做”中显示示例工作代码。因为我尝试使用QPainterPath。它没有正确呈现问题中的代码和结果,以查看出了什么问题。