@tschin

Как отобразить несколько графиков QwtPlotCurve?

Здравствуйте! Пытаюсь отобразить несколько графиков на QwtPlotCurve. Вроде бы все хорошо, но графики отображаются только после выполнения задержки (Sleep(1000)) после каждого вызова функции добавления данных на график.

функция добавления графика на поле рисования
void Widget::GetCurve(QwtPlot *plot, Qt::GlobalColor colorLine)
{
    QwtPlotCurve *curve;
    QwtSymbol *symbol;
    QPolygonF *points;
    curve=new QwtPlotCurve();
    symbol= new QwtSymbol( QwtSymbol::Ellipse,
                           QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
    points = new QPolygonF;
    curve->setTitle("Demo Curve");
    curve->setPen(colorLine, 6); // цвет и толщина кривой
    curve->setRenderHint(QwtPlotItem::RenderAntialiased, true); // сглаживание
    curve->setSymbol(symbol);
    listCurve.append(curve);
    listCurve.last()->attach(plot);
}

функция добавления данных на график:

void Widget::AppendSamples()
{
    QVector<double> x;
    QVector<double> y;
    QList<QPointF> listPoint =  ReturnPointsList(150);
    int listPointCount = listPoint.count();  
    for (int i=0;i<listPointCount;i++)
    {
        x.append(listPoint[i].x());
        y.append(listPoint[i].y());
    }
     listCurve.last()->setSamples(x,y);
}


Как это все используется:

GetCurve(listPlot.last(),Qt::red);
        AppendSamples();
       // Sleep::Sleeper(ms);
        GetCurve(listPlot.last(),Qt::green);
        AppendSamples();
        //Sleep::Sleeper(ms);
        GetCurve(listPlot.last(),Qt::black);
        AppendSamples();
       // Sleep::Sleeper(ms);
       listPlot.last()->replot();
  • Вопрос задан
  • 727 просмотров
Пригласить эксперта
Ответы на вопрос 2
vt4a2h
@vt4a2h
Senior software engineer (C++/Qt/boost)
Я не работал с этим компонентом, но скорее всего проблема в том, что replot() необходимо вызывать после каждого добавления новой кривой или вызвать setAutoReplot(true) у QwtPlot после создания объекта (хотя, вероятно первый вариант лучше).
Ответ написан
@DancingOnWater
После вызова replot вы должны попасть в цикл событий. У вас это происходит?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы