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() )之前完成的。
我有一个 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() )之前完成的。