在渲染之前重新计算QwtScaleDiv

时间:2015-09-25 13:03:25

标签: c++ qt qwt

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

enter image description here

是否有一些简单的方法可以在渲染之前重新计算除法,以便第一个标签位于最左侧,最后一个标签位于最右侧?

1 个答案:

答案 0 :(得分:0)

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