2016-10-27 2 views
0

QWt 플롯 Zoomer를 사용하여 간단한 예를 보여줍니다. 확대는 작동하지만 확대/축소는 원래 배율 대신 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)은 무의미하며 줌 스택을 초기화하기 위해 zoomer가 수행하므로 마지막 replot은 필요하지 않습니다.

확대/축소 기준이 [0,1000] 인 경우 일반적으로 축척이 이전에 계산되지 않은 플롯과 함께 줌머를 초기화했습니다.

커브를 첨부해도 범위가 즉시 업데이트되지 않는다는 점에 유의하십시오. 이는 다음 번 복제본 (또는 더 나은 QwtPlot :: updateAxes()) 전에 수행됩니다.

+0

나는'setZoomBase'가 필요하다는 것을 알고 코드에 적용했다. 그러나 doReplot = true가 필요한 이유를 놓쳤습니다. –