QLabel的视频内存使用情况和QWidget :: hide()的影响

时间:2019-01-22 13:31:30

标签: qt video-memory

我正在编写一个应用程序,可能会有成千上万个标签(某种日志查看应用程序),其中大多数都被QWidget :: hide()隐藏了。我想象一个QLabel在创建时会占用一些视频内存。现在,hide()是否释放了该视频内存?还是我必须使用QWidget :: remove()大部分隐藏标签才能将视频内存使用保持在合理水平?

1 个答案:

答案 0 :(得分:1)

通常,大多数小部件不将其预渲染的图像存储在内存中。取而代之的是,它们在无效后按需呈现。但是,如果渲染很费时,则可以这样做。看一下QLabel源代码(http://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/widgets/qlabel.cpp),似乎在启用scaledContents且需要缩放时,QLabel会缓存其像素图。纯文本标签仅按原样绘制,没有任何缓存。

仍然,如@ G.M所述,每个窗口小部件都会消耗一些系统内存来存储其自己的数据,并且由于事件处理而需要花费处理时间,因此,产生1万个标签是合理的资源浪费。相反,项目视图是单个小部件,可在其表面上绘制项目。没有事件处理开销,没有不必要的缓存。像QLabel一样,项目视图项目也可以完美样式化,有关详细信息,请参见http://doc.qt.io/archives/qt-5.8/stylesheet-examples.html#customizing-qlistviewhttp://doc.qt.io/archives/qt-5.8/stylesheet-examples.html#customizing-qtreeview。更复杂的外观看起来是可以通过QItemDelegate:Qt QListWidgetItem Multiple Lines

实现多行列表项