Seite 1 von 1

Problem bei Umstellung auf QwtPolar-1.0.0

Verfasst: 10. Januar 2012 12:43
von LotB
Guten Tag,

ich habe kürzlich mein Programm von QwtPolar-0.1.0 auf Version 1.0.0 umgestellt ( natürlich habe ich auch Qwt-6.0.1). Da hat sich ja die Klasse Qwt_data verändert bzw. ist ersetzt worden und nach einigem Hin und Her habe ich mein Programm auf QwtSeriesData umstellen können. Dabei habe ich mich an das mitgelieferte Beispiel gehalten. Meine Data-Klasse sieht dementsprechend so aus:

Code: Alles auswählen

class Data: public QwtSeriesData<QwtPointPolar>
{
public:
    Data(const QwtDoubleInterval &radialInterval,
         const QwtDoubleInterval &azimuthInterval, size_t size, double* yarray, double* xarray):
        d_radialInterval(radialInterval),
        d_azimuthInterval(azimuthInterval),
        d_size(size)
    {
        yValues = yarray;
        xValues = xarray;
    }

    virtual QwtPointPolar sample( size_t i ) const
    {
        return QwtPointPolar( xValues[i], yValues[i] );
    }

    virtual QRectF boundingRect() const
    {
        if ( d_boundingRect.width() < 0.0 )
            d_boundingRect = qwtBoundingRect( *this );

        return d_boundingRect;
    }

    virtual size_t size() const
    {
        return d_size;
    }

private:
    QwtDoubleInterval d_radialInterval;
    QwtDoubleInterval d_azimuthInterval;
    size_t d_size;
    double *yValues,
    *xValues;
};
Versuche ich aber damit eine Messung durchzuführen bleibt der Debugger an folgender Zeile hängen:
Bild

Ich habe keine Ahnung woran das liegen könnte, da ich das neue Konzept noch nicht so recht verstehe.
Bin für jede Hilfe dankbar!

LotB

Re: Problem bei Umstellung auf QwtPolar-1.0.0

Verfasst: 10. Januar 2012 16:51
von Uwe
Ich würde mal vermuten, dass es den Speicher hinter yarray/xarray ( oder sogar das komplette Interface Objekt ) nicht mehr gibt.

Uwe

Re: Problem bei Umstellung auf QwtPolar-1.0.0

Verfasst: 10. Januar 2012 19:50
von LotB
Ich kann dir leider nicht ganz folgen. Wie gesagt, unter Version 0.1 von QwtPolar lief es und ich habe die Erzeugung und die Zuweisung der Daten nicht verändert. Ein Aufruf sieht so aus:

Code: Alles auswählen

Data *PlotData = new Data(*radialInterval, *azimuthInterval, size, yValues, xValues);
Curve->setData(PlotData);
Ich habe lediglich die Data-Klasse angepasst.
Ist die Methode "virtual QRectF boundingRect() const" von mir richtig abgeleitet worden? Oder muss ich da irgendwelche problemspezifischen Werte zurückgeben?

LotB

Re: Problem bei Umstellung auf QwtPolar-1.0.0

Verfasst: 10. Januar 2012 21:57
von Uwe
Dein Datenobjekt kopiert die Arrays nicht sondern merkt sich nur dessen Adressen. Ob die Adressen zum Zeitpunkt des Absturzes noch gültig sind geht aus Deinem geposteten Code nicht hervor.

qwtBoundingRect iteriert über die Samples und verwendet dafür Deine Methode Data::sample(). Viele Möglichkeiten dabei abzstürzen - ausser freigegebenem Speicher oder einem falschen Wert in d_size - gibt es dabei eigentlich nicht.

Uwe