我有一个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();
}
答案 0 :(得分:2)
在附加曲线(包含有效数据)后创建缩放器或将代码修改为zoomer-&gt; setZoomBase(true);
线缩放器 - &gt;缩放(0)是没有意义的,并且最终的重新绘制不是必需的,因为它由缩放器完成以初始化其缩放堆栈。
当缩放基数为[0,1000]时,您通常会使用绘图初始化缩放器的缩放堆栈,其中之前未计算过刻度。
请注意,附加曲线不会立即更新范围 - 它在下一个重新绘制之前完成(或更好的QwtPlot :: updateAxes())。