2016-10-27 10 views
0

У меня есть qwt plot, вот простой пример с 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 после завязывания кривых (имеющих действительных данных) или изменить код zoomer- > setZoomBase (истина);

Масштабирование линии -> масштабирование (0) бессмысленно, и окончательный ретранслятор не нужен, как это делается с помощью масштабирования, чтобы инициализировать его стек увеличения.

Когда вы располагаете базой зума [0,1000], вы обычно инициализировали стек масштабирования вашего транслятора с графиком, в котором весы не были рассчитаны ранее.

Обратите внимание, что прикрепление кривых не обновляет диапазоны сразу - это делается перед следующим репливом (или лучше QwtPlot :: updateAxes()).

+0

Я понимаю, что 'setZoomBase' необходим, и я применил его в своем коде. Однако мне не хватает причины, по которой для этого требуется doReplot = true. –