2014-05-22 81 views
2

我想用線性漸變顏色填充多邊形,但不知道如何實現它。到目前爲止我正在使用下面的代碼。Qt多邊形的線性漸變

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); 

} 
+0

你的問題到底是什麼? –

回答

1

您可以創建一個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)。你可以任意定義漸變的方向。

+0

非常感謝你,它的工作原理。 – Akineo