2014-09-20 59 views
0

嗨我正在使用qwtspectrogram來繪製我的數組數據,但我遇到的問題是縮放.. qwt縮放分佈在區間x和y和軸取決於像素。例如,如果我有一個數據集矢量(500x500),並且我想爲500mm x500mm繪製它的完美圖像,因爲它是在像素上進行平移的,但是如果我想爲300mmx300mm繪製500x500的點數,這是一團糟,它顯示在情節500x500我知道我必須管理x和y軸,但我不知道該怎麼做。我設法玩了一下,爲250mmx250mm的區域顯示500x500,但不能爲其他人做。 我的代碼如下所示qwtspectrogram軸調整區域不是像素

class mydata: public QwtRasterData 
{ 
    char filepath[35]; 
    QFile myfile; 
    QVector<qint16> fileBuf; 
    int pixel =500; // it represents the number of pixels in one row or column 
    int dial =1000; 
public: 

mydata() 
    { 
    setInterval(Qt::XAxis, QwtInterval(0, (pixel)-1)); 
    setInterval(Qt::YAxis, QwtInterval(0, (pixel)-1)); 
    setInterval(Qt::ZAxis, QwtInterval(-dial, dial)); 

    { 
    sprintf_s(filepath, "c:\\myfile.bin"); 

    myfile.setFileName(filepath); 
    if(!myfile.open(QIODevice::ReadOnly)) return; 

    QDataStream data(&myfile); 
    data.setByteOrder(QDataStream::LittleEndian); 

    while(!data.atEnd()) { 
     qint16 x; 
     data >> x; 
     fileBuf.append(x); 
    } 

    myfile.close(); 
} 
} 

virtual double value(double x, double y) const//shifted 
{ 
int x_pos = static_cast<int>(x); 
int y_pos = static_cast<int>(y); 
double c = (fileBuf[ ((x_pos)+((pixel-(y_pos))*pixel))]); 
return c; 
} 
} 

在短我有相同數量的不同的區域的像素的,但是我有在情節軸的相同的表示。

回答

0

這裏是轉換規模的雙重價值轉換爲字符串和顯示,而不是

class MyScaleDraw: public QwtScaleDraw 
{ 
public: 
    MyScaleDraw() 
    { 
     setTickLength(QwtScaleDiv::MajorTick, 10); 
     setTickLength(QwtScaleDiv::MinorTick, 2); 
     setTickLength(QwtScaleDiv::MediumTick, 0); 

     setLabelRotation(0); 
     setLabelAlignment(Qt::AlignLeft | Qt::AlignVCenter); 

     setSpacing(10); 
    } 

    virtual QwtText label(double value) const 
    { 
     QwtText h=QwtText(QString::number(value*0.75); //use any scaling factor you want 
     return h; 
    } 
}; 

包括創建情節

d_plot->setAxisScaleDraw(QwtPlot::xBottom, new MyScaleDraw()); 
d_plot->setAxisScaleDraw(QwtPlot::yLeft, new MyScaleDraw()); 

這解決了我的問題後,下面的代碼下面的一類