QCustomPlotの高速化

  • 2021.03.07
  • Qt

現在作成しているデータ収集ソフトはQCustomPlotを使ってグラフを描画している。とりあえずここにあるサンプルプログラムの通りにsetDataメソッドを使っていたが、データ点数が10万とかに増えると処理が重くなり、使い物にならなかった。

少し調べてみたらQCustomPlotではグラフごとに内部にQCPGraphDataContainer型のデータを持っており、上のサンプルにあるようにQVectorなどで別途データを持っておく必要はないようだ。

setDataメソッドは引数として渡したデータをQCustomPlotが内部に持っているQCPGraphDataContainerにコピーしているようで、データ点数が10万もあると10万のデータをコピーするのに時間がかかって処理が重くなっていたようだ。

ではどうするかというとaddDataメソッドを使えばいい。このメソッドはQCPGraphDataContainerに引数として渡したデータを追加するだけなので、setDataメソッドのように一から丸ごとコピーすることは無い。データが10万あっても追加するデータが100個なら、100個のデータをコピーするだけなので処理は遥かに軽くなる。