1

我正在研究 QwtPlot - 我在 X 轴上有一个常规时间刻度和一个带有离散值的自定义 y 刻度

问题是,当我用放大镜缩放离散轴(它只有主要刻度)时,刻度上的刻度开始重复自己,而不是得到例如 2 个刻度“0”和“1”我得到 4刻度“0”、“0”、“1”、“1”(或更多,取决于缩放)。所以因为分隔符不能分割值,它只是重复它们。

不知道使用/重新实现什么功能或对象来使比例停止绘制额外的划分(顺便说一句,还有额外的网格线)。只是阻止放大镜放大太多并不是正确的答案,因为我希望它放大更多。

我对离散 y 轴(在继承 QwtPlot 的 CPlot 中)所做的是:

QList<double> ticks;
for(int i=0; i<visualisation->getPIDs().size();i++)
{
    ticks.append(i);
}
QwtScaleDiv* div=new QwtScaleDiv(0,visualisation->getPIDs().size()-1);
div->setTicks(QwtScaleDiv::MajorTick, ticks);
discreteScale=new CDiscreteScaleDraw;
discreteScale->setLUT(visualisation->getPIDs());
setAxisScaleDraw(QwtPlot::yLeft, discreteScale);
setAxisMaxMinor(QwtPlot::yLeft,0);
this->setAxisAutoScale(QwtPlot::yLeft, 0);

PS。在我的时间尺度上,我有一个类似的问题,但这是精度的情况 - 放大时,我想获得 123,456.789 的精度,我得到 123,456.78(然后标签再次增加一倍、三倍等)。我还想删除 QwtScaleDraw 放在那里的昏迷,这样我就可以得到 123456.789,但最重要的是摆脱重复标签。

4

1 回答 1

1

双倍的意义大于 6,但不是无穷无尽的,所以在不限制放大镜的情况下,你迟早会遇到这个问题。

double 到字符串的转换是使用 QLocale::toString() 及其默认参数值 ( 'g', 6 ) 完成的。如果你想使用不同的值,你必须通过实现 CDiscreteScaleDraw::label() 来重载。

关于“,”:猜测这是因为您的语言环境的 NumberOptions。尝试使用 QLocale::setNumberOptions() 更改它们。

于 2013-11-10T13:26:49.687 回答