Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QPainter. Градиент контура фигуры


Автор: asd 24.9.2010, 11:57
Как отрисовать такую линию:
http://ipicture.ru/

Сейчас я её отрисовал так:
Код




void MenuItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setBrush(Qt::black);
    painter->drawRect(option->exposedRect);

    int LineWidth = 6;
    int Radius = 10;
    QColor InsideColor = Qt::red;
    QColor OutsideColor = Qt::white;
    QRadialGradient radialGradient;

    // левой крвй
    radialGradient = QRadialGradient(Radius, Radius, Radius, Radius, Radius);
    radialGradient.setColorAt((Radius - LineWidth*1.0)/Radius, InsideColor);
    radialGradient.setColorAt(1, OutsideColor);
    painter->setPen(QPen(QBrush(radialGradient), LineWidth));
    painter->drawArc(0, 0, Radius*2, Radius*2, 90*16, 90*16);

    // правый край
    radialGradient = QRadialGradient(Radius + 45, Radius, Radius, Radius + 45, Radius);
    radialGradient.setColorAt((Radius - LineWidth*1.0)/Radius, InsideColor);
    radialGradient.setColorAt(1, OutsideColor);
    painter->setPen(QPen(QBrush(radialGradient), LineWidth));
    painter->drawArc(45, 0, Radius*2, Radius*2, 0*16, 90*16);

    // прямая
    QLinearGradient linearGrad;
    linearGrad.setColorAt(0, Qt::white);
    linearGrad.setColorAt(1, Qt::red);
    QPen NewPen;
    NewPen.setWidth(LineWidth);
    linearGrad.setStart(0, 0);
    linearGrad.setFinalStop(0, LineWidth);
    NewPen.setBrush(linearGrad);
    painter->setPen(NewPen);

    painter->drawLine(Radius,0, Radius+45,0);
}


Что выглядит ужасно, по моему. Есть ли боле лаконичное решение?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)