在渲染之前重新计算QwtScaleDiv

在渲染之前重新计算QwtScaleDiv

问题描述:

我实现了一个QwtPlot,它可以在实时添加数据时在屏幕上滚动。根据用户输入,使用QwtPlotRenderer偶尔会将图形的图像呈现为文件。然而,因为正常运行时轴滚动时,QwtScaleDiv刻度线看起来就有点靠不住在渲染时(他们是右对齐):在渲染之前重新计算QwtScaleDiv

enter image description here

有一些简单的方法,我可以重新计算除了第一个标签在最左边,最后一个在最右边?

这并不像它首先看到的那么困难。基本上,你需要做的就是暂时更换axisScaleDiv

auto divX = this->axisScaleDiv(xBottom); 

double ub = divX.upperBound(); 
double lb = divX.lowerBound(); 
double numTicks = 11.0; // 10 even divisions 

// you can create minor/medium ticks if you want to, I didn't. 
QList<double> majorTicks; 
for (int i = 0; i < numTicks; ++i) 
{ 
    majorTicks.push_back(lb + i * ((ub - lb)/(numTicks - 1))); 
} 

// set the scale to the newly created division 
QwtScaleDiv renderDivX(divX.lowerBound(), divX.upperBound(), 
    QList<double>(), QList<double>(), majorTicks); 
this->setAxisScaleDiv(xBottom, renderDivX); 

// DO PLOT RENDERING 
QwtPlotRender renderer; 
renderer.renderDocument(...); 

// RESOTRE PREVIOUS STATE 
this->setAxisScaleDiv(xBottom, divX); 
this->setAxisScaleDiv(yLeft, divY); 

// update the axes 
this->updateAxes();