Qt 如何使用QPaint创建一侧圆形和另一侧扁平矩形?
我想使用QPainter实现类似的功能 我尝试在QPainter中并排使用2个圆形矩形,但无法获得上面的图像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 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。它没有正确呈现问题中的代码和结果,以查看出了什么问题。