【问题标题】:recalculate QwtScaleDiv before rendering渲染前重新计算 QwtScaleDiv
【发布时间】:2023-04-07 06:09:01
【问题描述】:

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

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

【问题讨论】:

    标签: c++ qt qwt


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 2017-12-25
      • 2019-09-15
      • 2021-06-01
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      相关资源
      最近更新 更多