Как выбрать с какой стороны QCPCurve заполнить градиентом?

Я использую qcustomplot и рисую кривую (QCPCurve). Код ниже заполняет только область выше кривой. Но я хочу заполнить область на другой стороне кривой. А как сделать градиентную заливку области до границ графика?

что я должен сделать

_myPlot->clearPlottables();

QVector<double> x;
QVector<double> y;

for(int point = 0; point < shadowZone.length() ; point++){
x.push_back(shadowZone.at(point).longitude);
y.push_back(shadowZone.at(point).latitude);
}

QBrush shadowBrush (QColor(0,0,0), Qt::Dense7Pattern);

QCPCurve *newCurve = new QCPCurve(_myPlot->xAxis, _myPlot->yAxis);
newCurve->setBrush(shadowBrush);
newCurve->addData(x,y);

_myPlot->replot();

0

Решение

Одним из возможных решений является использование QCPGraph Вместо того, чтобы использовать QCPCurve использовать setChannelFillGraph(), стратегия заключается в создании другого QCPGraph это самая нижняя линия графика, вы должны использовать сигналы rangeChanged осей, чтобы обновить график при необходимости.

QCPGraph *newCurve = new QCPGraph(_myPlot->xAxis , _myPlot->yAxis);
newCurve->addData(x,y);

QBrush shadowBrush(QColor(0,0,0), Qt::Dense7Pattern);

newCurve->setBrush(shadowBrush);

QCPGraph *minGraph = new QCPGraph(_myPlot->xAxis , _myPlot->yAxis);
newCurve->setChannelFillGraph(minGraph);

QObject::connect(_myPlot->xAxis, static_cast<void(QCPAxis::*)(const QCPRange &)>(&QCPAxis::rangeChanged), [_myPlot, minGraph](const QCPRange & newRange){
minGraph->setData(QVector<double>{newRange.lower, newRange.upper},
QVector<double>{_myPlot->yAxis->range().lower,_myPlot->yAxis->range().lower});
});

QObject::connect(_myPlot->yAxis, static_cast<void(QCPAxis::*)(const QCPRange &)>(&QCPAxis::rangeChanged), [_myPlot, minGraph](const QCPRange & newRange){
minGraph->setData(QVector<double>{_myPlot->xAxis->range().lower,_myPlot->xAxis->range().upper},
QVector<double>{newRange.lower, newRange.lower});
});

Полный пример можно найти в следующем ссылка на сайт

введите описание изображения здесь

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector