C++ 当我每秒调用它40次时,QListWidget::addItem()会闪烁
在GUI中以平均每秒40行的速度显示大量来自后端的日志行,比QListWidget更好的选择是什么 QListWidget提供了一个闪烁甚至是白色的框,在很长一段时间内,当许多字符串已经放入ListWidget中时,它会代替一个小部件 有没有更好的解决方案可以向用户动态显示日志行 更新:C++ 当我每秒调用它40次时,QListWidget::addItem()会闪烁,c++,performance,qt,logging,C++,Performance,Qt,Logging,在GUI中以平均每秒40行的速度显示大量来自后端的日志行,比QListWidget更好的选择是什么 QListWidget提供了一个闪烁甚至是白色的框,在很长一段时间内,当许多字符串已经放入ListWidget中时,它会代替一个小部件 有没有更好的解决方案可以向用户动态显示日志行 更新: 改变了架构。将新的QString添加到std::deque。使用QTimer,我每隔1/10秒向QPlainTextEdit添加一个字符串,从deque中删除。互斥用于保护std::deque(日志行来自不同的
改变了架构。将新的QString添加到std::deque
如果有时间实现我自己的QListView并将字符串保存在预先分配的大内存块中,那将非常好。您确定需要
QListWidget
的功能吗?如果您只想显示日志行,我认为简单的只读更合适。您可以尝试使用QListView
并拥有qabstractemmodel
的实现。然后,您可以根据需要存储行,并在大组中添加新行(大约每秒钟一次就可以了)。然后,视图不会在添加每一行时刷新,而只在组中刷新,这将极大地提高性能。我建议设置刷新率,并立即追加所有收集的项目。您将避免在追加的每一行重新绘制小部件
长话短说:
QTimer具有刷新率(~1-3秒就足够了),QListWidget::addItems而不是QListWidget::addItem我担心QPlainTextEdit在添加行时可能会导致大量内存重新分配。QListWidget看起来很吸引人,因为它将行存储为一系列分隔的行:)@Pavelkoldin,使用QListWidget,您将拥有Qt的MVC框架的所有开销,因此它肯定会比使用纯文本消耗更多内存。你好像想用大锤敲开一颗坚果。以每秒40行的速度,你需要像视频游戏一样的优化来避免闪烁。也许可以尝试openGL或Direct 3D来实现您的记录器:)@Laurent,谢谢。QPlainTextEdit快得多。我已经使用QTimer设置为100毫秒进行刷新(-;还将QListWidget更改为QPlainTextEdit。