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