我試圖做一個規則像這樣的時間表:Qt:QGraphicsScene :: addText中的內存泄漏?
我有一個的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());
在beggining,然後重新添加標籤和線條。
我意識到我的表現不好。我的場景有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和我的問題是:
那些是內存泄漏是真的嗎?
我做錯了什麼?
是否有另一種/更好的方法來實現我的規則?
在此先感謝!
你怎麼能有8K元素?! –
我每隔一行加上一段時間的標籤。例如: 0 0:10 0:20 | .... | .... | .... | .... | .... 等一個2小時! (60s * 60m * 2h = 7200行) –
如果您顯示包含視頻整個持續時間的完全縮小時間線,則沒有人能看到如此多的線條和標籤。您必須顯示合理數量的刻度線,並根據縮放級別調整刻度週期。 –