Qt多边形的线性梯度

Qt Linear gradient for polygons

本文关键字:线性 多边形 Qt      更新时间:2023-10-16

我想用线性渐变颜色填充多边形,我不知道如何实现它。到目前为止,我使用以下代码:

std::vector<Element*> elems = m_mesh->getElements();
for (unsigned int i=0; i<elems.size(); ++i)
{
    std::vector<Node*> nodes = elems[i]->getNodes();

    QPolygon elepolygon;
    unsigned int j;
    for (j=0; j<nodes.size(); ++j)
    {
        elepolygon << QPoint(nodes[j]->x()*scalex+shiftx,nodes[j]->y()*scaley+shifty);
    }

    int r = qrand() % ((255 + 1) - 0);
    int g = qrand() % ((255 + 1) - 0);
    int b = qrand() % ((255 + 1) - 0);
    QBrush brush(QColor(r,g,b));
    QPainterPath tmpPath;
    tmpPath.addPolygon(elepolygon);
    painter.fillPath(tmpPath,brush);
    painter.drawPolygon(elepolygon);
}

你可以创建一个QLinearGradient,使用setColorAt函数在不同的停止点设置颜色,并将画家的画笔设置为创建的QLinearGradient:

    painter->setPen(QPen(Qt::black, 3));
    QLinearGradient gradient(-400,-400,400,400);
    gradient.setColorAt(0, QColor(110,110,110));
    gradient.setColorAt(0.27, QColor(230,230,230));
    gradient.setColorAt(0.44, QColor(110,110,110));
    gradient.setColorAt(0.76, QColor(230,230,230));
    gradient.setColorAt(1, QColor(110,110,110));
    painter->setBrush(gradient);
    painter->drawPolygon(elepolygon);

在本例中,插值区域介于(-400,-400)和(400,400)之间。你可以任意设置渐变方向