2017-07-21 1 views
0

ich meine Handlung Klassen verwenden, basierend auf qwtplot können Code hier angesehen werden: ist https://github.com/pospiech/code/tree/master/libdev/plot/plottools/trunk/srcqwtplot: keine Handlung Update auf Replot

Dieser Code in einer anderen Anwendung verwendet, hier erstelle ich qwtplot Klassen (QMatrixPlot) und Daten hinzufügen und rufen Replot

plot2DAmplitude->setMatrixData(QVector<double>::fromStdVector(dataAmplitude), 
         xaxis.size(), 
         QwtInterval(xaxis.front(), xaxis.back()), 
         QwtInterval(yaxis.front(), yaxis.back())); 

    plot2DAmplitude->replot(); 

setMatrixData ist der folgende Code:

void setMatrixData(const QVector<double> &values, int numColumns, QwtInterval xAxisRange, QwtInterval yAxisRange) 
{ 
    m_MatrixRasterData->setInterval(Qt::XAxis, xAxisRange); 
    m_MatrixRasterData->setInterval(Qt::YAxis, yAxisRange); 

    double minValue = *std::min_element(std::begin(values), std::end(values)); 
    double maxValue = *std::max_element(std::begin(values), std::end(values)); 
    m_MatrixRasterData->setInterval(Qt::ZAxis, QwtInterval(minValue, maxValue)); 

    m_MatrixRasterData->setValueMatrix (values, numColumns);   
    d_spectrogram->setData(m_MatrixRasterData); 

    const QwtInterval zInterval = d_spectrogram->data()->interval(Qt::ZAxis); 
    setAxisScale(QwtPlot::yRight, zInterval.minValue(), zInterval.maxValue()); 

    QwtScaleWidget *axis = axisWidget(QwtPlot::yRight); 
    axis->setColorMap(zInterval, QColorMap::map(d_mapType)); 
} 

Dies funktioniert - einmal. Der zweite Aufruf mit verschiedenen Daten tut nichts, obwohl der gleiche Code aufgerufen wird. Nur wenn ich die Daten heranzoome und auswerte bekomme ein Update.

Irgendeine Idee? Qwt ist Version 6.1.3. Sobald ich ein minimales Beispiel abgeschlossen habe, werde ich diesen Beitrag aktualisieren.

+0

Hier ist ein weiteres Beispiel für möglicherweise das gleiche Problem: https://stackoverflow.com/questions/34948704/qwt-plot-is-not-replotting/34949185#34949185. Allerdings 'plot-> setAutoReplot (true);' hat nicht gelöst, wenn für mich. Das Problem ist, dass die Daten, wenn sie für den Plot verfügbar sind, in der GUI nicht aktualisiert werden. –

Antwort

1

QwtPlotRasterItem speichert das gerenderte Bild zwischen. In Ihrem Code ändern Sie die Daten hinter der Rückseite des Elements, sodass das Element nicht weiß, dass der Cache ungültig ist.

Mit QwtPlotRasterItem :: invalidateCache() können Sie Probleme wie diese lösen.

Verwandte Themen