次のようなタイムラインのルールを作成しようとしています:
私は QGraphicsView を持っています。ここに QGraphicsScene を配置し、そこに QGraphicsItems のような行やいくつかのラベルを追加します。
ズームが変更された場合にのみシーンに要素を追加します (paintEvent が発生した場合は追加しません)。
時間ラベルを追加するには、次を使用します。
QString label = "00:14"; // For example
int posX = ... // Here I calculate the position of the label
scene->addText(label,QFont("Arial",8))->setPos(posX,-1);
ルールを再描画する必要がある場合は、次のようにします。
qDeleteAll(scene->items());
最初にラベルと線を追加します。
成績が悪いことに気づきました。私のシーンには 8k 要素 (ラインとラベルの間) のようなものがあるので、Valgrind を使用して問題をチェックしました。
「おそらく」シーンにテキストを追加する行にメモリリークがあることを示しています。次のようなメッセージがあります。
2,165,760 bytes in 470 blocks are possibly lost in loss record 9,922 of 9,923
in TimelineWidget::drawRule() in Timeline/timelinewidget.cpp:166
1: realloc in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
2: /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3
3: /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3
4: QTextDocument::setPlainText(QString const&) in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3
5: /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3
6: QGraphicsTextItem::QGraphicsTextItem(QString const&, QGraphicsItem*, QGraphicsScene*) in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3
7: QGraphicsScene::addText(QString const&, QFont const&) in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3
8: TimelineWidget::drawRule()
これは addText 呼び出しでのみ発生し、addLine 呼び出しでは発生しません。
Qt 4.8を使用していますが、質問は次のとおりです。
それらのメモリリークは本当ですか?
私は何か間違ったことをしていますか?
私のルールを実装するための別の/より良い方法はありますか?
前もって感謝します!