qwt 缩小错误反射

qwt zoom out with wrong reect

我有一个 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();
}

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

zoomer->zoom(0) 行毫无意义,最终的重绘不是必需的,因为它是由 zoomer 完成的,用于初始化其缩放堆栈。

当缩放基数为 [0,1000] 时,您通常已经使用绘图初始化了缩放器的缩放堆栈,之前尚未计算比例。

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