2016-10-27 3 views
0

QWtプロット、ここではQWtPlotZoomerを使用した簡単な例です。ズームインは有効ですが、元の縮尺ではなく縮尺を0〜1000に戻します。qwt間違ったレルムでズームアウト

私は(これらの行の違いは何ですか?)

zoomer->setZoomBase(false); 
    zoomer->zoom(0); 

でこれを解決しようとしたが、それは効果がありません。 zoomerの正しい初期スケールを得るために何をする必要がありますか?自明な解は、曲線の取り付け後、しかし、適用されない本当の仕事の例ではズーマーを実装することです:

#include <QtWidgets/QApplication> 
#include <QtWidgets/QMainWindow> 
#include <QDebug> 

#include <qwt_plot.h> 
#include <qwt_plot_curve.h> 
#include <qwt_plot_zoomer.h> 

#include <vector> 
using std::vector; 

int main(int argc, char **argv) 
{ 
    QApplication a(argc, argv); 

    QwtPlot * plot = new QwtPlot(); 
    plot->setAxisAutoScale(QwtPlot::xBottom); 
    plot->setAxisAutoScale(QwtPlot::yLeft); 

    QwtPlotZoomer *zoomer; 
    zoomer = new QwtPlotZoomer(QwtPlot::xBottom, QwtPlot::yLeft, plot->canvas()); 

    // create data 
    vector<double> x(100); 
    vector<double> y1(x.size()); 

    for (size_t i = 0; i< x.size(); ++i) { x[i] = int(i)-50; } 
    for (size_t i = 0; i< y1.size(); ++i) { y1[i] = pow(double(abs(i-50))/10,2); } 

    // first curve 
    QwtPlotCurve *curve = new QwtPlotCurve(); 
    curve->setRawSamples(&x[0], &y1[0], x.size()); 
    curve->attach(plot); 

    zoomer->setZoomBase(false); 
    zoomer->zoom(0); 

    plot->replot(); 

    QMainWindow window; 
    window.setCentralWidget(plot); 
    window.resize(800, 600); 
    window.show(); 

    return a.exec(); 
} 

答えて

1

は(有効なデータを持つ)曲線を取り付けた後にズーマーを作成するか、またはzoomer-するようにコードを修正します> setZoomBase(true);

line zoomer-> zoom(0)は無意味で、ズームスタックを初期化するためにズームレンズによって行われるので、最終的な再配置は必要ありません。

[0,1000]のズームベースを使用すると、通常、スケールが計算されていないプロットで、ズームレンズのズームスタックが初期化されています。

カーブをアタッチしても、直ちに範囲が更新されるわけではないことに注意してください。これは次回のレプリカ(またはより良いQwtPlot :: updateAxes())の前に行われます。

+0

私は 'setZoomBase'が必要で、私は自分のコードにそれを適用したことを理解します。しかし、doReplot = trueが必要な理由は分かりません。 –

関連する問題