gpt4 book ai didi

c++ - Qt中在线条上方绘制椭圆时的颜色合并问题

转载 作者:行者123 更新时间:2023-11-30 03:16:40 27 4
gpt4 key购买 nike

我正在开发一个类似于画家的小型应用程序。我希望我的应用程序具有一项功能,允许用户绘制点,然后按照绘制点的顺序将它们与线连接起来。我还希望将我的点绘制在线上方。这是我试图实现这一目标的方式:

 void ImageViewer::on_linesAct_triggered()
{
QPainter paint(objectpix);
QPen LinePen (QColor(255-pointcolor[currentset-1].red(),255-pointcolor[currentset-1].green(),255-pointcolor[currentset-1].blue()));
LinePen.setWidth(5);

for(int i=0;i<count[currentset-1]-1;i++)
{
paint.setPen(LinePen);
QPoint p1(static_cast<int>(round(tableX[i][currentset-1])),static_cast<int>(round(tableY[i][currentset-1])));
QPoint p2(static_cast<int>(round(tableX[i+1][currentset-1])), static_cast<int>(round(tableY[i+1][currentset-1])));
paint.drawLine(p1,p2);
paint.setPen(QPen(pointcolor[currentset-1]));
paint.setBrush(QBrush(pointcolor[currentset-1],Qt::SolidPattern));
paint.drawEllipse(p1,2,2);
paint.drawEllipse(p2,2,2);
}

/...
}

除了线条和点的颜色有点合并(不确定命名法)之外,它按预期工作。下面的图片说明了这个问题。 enter image description here对可能的解决方案有什么想法吗?

最佳答案

如果您考虑点列表 [A、B、C、D] 和您的代码:

  • 迭代 1:p1 = A,p2 = B

    • 在A和B之间画一条线
    • 在A点和B点画椭圆
  • 迭代 2:p1 = B,p2 = C

    • 在 B 和 C 之间画线 <-- 将在 B 处的椭圆上方画线
    • Draw ellipse at B and C <-- Will re-draw the ellipse at B
  • 迭代 3:p1 = C,p2 = D

    • 在 C 和 D 之间画线 <-- 将在 C 处的椭圆上方画线
    • Draw ellipse at C and D <-- Will re-draw the ellipse at C点

你画了两次你的椭圆,它们之间有一条线的起点。您可以看到由于别名(如另一个答案中提到的)和第二条线下方绘制的第一个椭圆造成的伪影。

实现这一目标的最简单方法是使用两个循环:

class MyWidget: public QWidget
{
public:
MyWidget(): QWidget()
{}
virtual void paintEvent(QPaintEvent* ev) override
{
QVector<QPoint> pointcolor;
pointcolor << QPoint(10, 12) << QPoint(40, 60) << QPoint(70, 20) << QPoint(100, 100);
QPainter paint(this);
paint.setRenderHint(QPainter::Antialiasing);
QPen LinePen (Qt::red);
LinePen.setWidth(5);

for(int i = 1;i != pointcolor.length();++i)
{
paint.setPen(LinePen);
QPoint p1 = pointcolor.at(i - 1);
QPoint p2 = pointcolor.at(i);
paint.drawLine(p1,p2);
}

// Draw the points above the lines
paint.setPen(Qt::green);
paint.setBrush(Qt::green);
for(QPoint const& point: pointcolor)
{
paint.drawEllipse(point,2,2);
}
}
};

关于c++ - Qt中在线条上方绘制椭圆时的颜色合并问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56124710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com