Better remove all what you did so far and restart with something like that:
{
public:
SpectrogramData()
{
m_intervals[ Qt::XAxis ] = QwtInterval( 0, 120 );
m_intervals[ Qt::YAxis ] = QwtInterval( 0, 120 );
m_intervals[ Qt::ZAxis ] = ...
}
virtual QwtInterval interval( Qt::Axis axis ) const
{
if ( axis >= 0 && axis <= 2 )
return m_intervals[ axis ];
return QwtInterval();
}
virtual double value( double x, double y ) const
{
double value = ...; // find the value corresponding to x/y in your vector
return value;
}
private:
QwtInterval m_intervals[3];
};
class SpectrogramData: public QwtRasterData
{
public:
SpectrogramData()
{
m_intervals[ Qt::XAxis ] = QwtInterval( 0, 120 );
m_intervals[ Qt::YAxis ] = QwtInterval( 0, 120 );
m_intervals[ Qt::ZAxis ] = ...
}
virtual QwtInterval interval( Qt::Axis axis ) const
{
if ( axis >= 0 && axis <= 2 )
return m_intervals[ axis ];
return QwtInterval();
}
virtual double value( double x, double y ) const
{
double value = ...; // find the value corresponding to x/y in your vector
return value;
}
private:
QwtInterval m_intervals[3];
};
To copy to clipboard, switch view to plain text mode
If you don't insist on using std::vector you could use QwtMatrixRasterData like demonstrated in the rasterview example. You get at least bilinear interpolation and a valid pixel hint for free.
Uwe
Bookmarks