qwt以错误的方式缩小

时间:2016-10-27 19:43:41

标签: qt zoom qwt

我有一个qwt图,这里有一个简单的例子,带有QWtPlotZoomer。放大有效,但缩放将比例重置为0-1000,而不是原始比例。

我试着解决这个问题(这些行之间有什么区别?)

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

但这没有效果。需要做些什么来为缩放器获得正确的初始比例?一个简单的解决方案是在曲线附加后实现缩放,但是在一个不适用的实际工作示例中:

#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 个答案:

答案 0 :(得分:2)

在附加曲线(包含有效数据)后创建缩放器或将代码修改为zoomer-&gt; setZoomBase(true);

线缩放器 - &gt;缩放(0)是没有意义的,并且最终的重新绘制不是必需的,因为它由缩放器完成以初始化其缩放堆栈。

当缩放基数为[0,1000]时,您通常会使用绘图初始化缩放器的缩放堆栈,其中之前未计算过刻度。

请注意,附加曲线不会立即更新范围 - 它在下一个重新绘制之前完成(或更好的QwtPlot :: updateAxes())。