0

入力データをグラフ化する QCustomPlot があります。プロットは見栄えがしますが、ウィンドウのサイズを変更したり、急にズームしたりドラッグしたりすると、画家の下からキャンバスをドラッグしたかのように、データが誤ってプロットされます。

なぜこれが起こるのですか?プロットスロットに条件を追加して、ドラッグが発生しているかどうかを検出し、プロットを保留しようとしていますが、そうする必要がなかったらよかったのにと思います。

QCustomPlot にキーと値がある場合、プロットのサイズがどのように変更されても、再プロット中にそれらを正しく配置できないのはなぜですか?

4

2 に答える 2

0

これは実際には QCustomPlot の問題ではなくなったため、最初は明らかではありませんでした。私のプログラムでは、リアルタイム データを受信して​​います。add data/replot 関数でデータにタイムスタンプが付けられます。再プロットはキューに入れられているため、プロットをドラッグしてサイズを変更すると、データの追加/再プロット関数が呼び出されたときに遅延が発生し、タイムスタンプがずれました。

別のクラスで管理されているデータを解析したらすぐにタイムスタンプを作成することで、これを修正しました。次に、タイムスタンプを add data/replot 関数に渡します。

そのため、リアルタイム データを使用している場合は、タイム スタンプをプログラムのできるだけ早い段階で取得し、遅延が発生したり、他のスレッドの後ろでキューに入れられたりする可能性がある関数には入れないでください。

于 2015-09-23T18:59:03.187 に答える
0

I had similar issues. I solved it creating a slot "onBeforeReplot( )" which is connected to QQCustomPlot's Signal "beforeReplot()". In the slot, first I obtain the QCustomPlot's pointer:

QCustomPlot *plot = dynamic_cast<QCustomPlot*>(QObject::sender() );

If the pointer is not NULL, the sender is a valid QCustomPlot and you could e.g. write some code like this:

plot->xAxis->setRange( computeValidRangeX( plot->xAxis->range() ) );
plot->yAxis->setRange( computeValidRangeY( plot->xAxis->range() ) );

to ensure the ranges are valid. The methods "computeValidRange*" do have the current range as input and give a valid range. In it you could set minimal or maximal values and a minimum span for the range.

于 2015-09-07T10:44:03.070 に答える