在渲染之前重新计算 QwtScaleDiv

recalculate QwtScaleDiv before rendering

我实现了一个 QwtPlot,当数据被实时添加时它会在屏幕上滚动。根据用户输入,地块的图像偶尔会使用 QwtPlotRenderer 渲染到文件中。但是,由于轴在正常操作期间滚动,因此 QwtScaleDiv 刻度线在渲染时可能看起来有点不稳定(它们是右对齐的):

有没有什么简单的方法可以让我在渲染之前重新计算除法,使第一个标签在最左边,最后一个标签在最右边?

这并不像最初看起来那么困难。基本上,您需要做的就是暂时替换 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();