1

私は QwtPlot に取り組んでいます - X 軸には通常の時間スケールがあり、離散値を持つカスタム y スケールがあります

問題は、拡大鏡を使用して個別の Axis (主要な目盛りのみがある) をズームしているときに、スケールの目盛りが繰り返され始め、たとえば 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になります(その後、ラベルが2倍、3倍になります)。また、123456.789 になるように QwtScaleDraw が配置するコマを削除したいと思いますが、最も重要なことはラベルの繰り返しを取り除くことです。

4

1 に答える 1

1

double の重要性は 6 を超えますが、無限ではないため、拡大鏡を制限しなければ、遅かれ早かれこの問題に遭遇します。

double から文字列への変換は、 QLocale::toString() をデフォルトのパラメーター値 ( 'g', 6 ) とともに使用して行われます。別の値を使用する場合は、CDiscreteScaleDraw::label() を実装してオーバーロードする必要があります。

",': に関しては、これはロケールの NumberOptions によるものだと推測します。QLocale::setNumberOptions() を使用してそれらを変更してみてください。

于 2013-11-10T13:26:49.687 に答える