我有一个GUI应用程序,其主要部分是QPlainTextEdit。它用于显示应用程序的日志,因此相关文本会无限制地逐行增长。
由于应用程序要运行很长时间,我需要限制为此日志分配的内存。因此,我希望有一些maxNumLines
或maxNumCharacters
参数,以确保在到达时将截断历史记录,即在添加新行时删除头行(也称为日志循环< / em>的)。
为实现这一目标,我找到了函数
// get the associated text
QString toPlainText () const
// set the associated text
void setPlainText ( const QString & text )
因此,像这个未经测试的代码可能会有这样的诀窍:
QString &tmp = pte.toPlainText();
while (tmp.size() > maxNumCharacters) {
// remove lines from the head of the string until the desired size is reached
// removes nothing if "\n" could not be found
tmp.remove(0, tmp.indexOf("\n")+1);
}
pte.setPlainText( tmp );
这是从QPlainTextEdit
删除第一行的方法吗?是否有其他Qt Text GUI元素更适合此任务(设置最大行数并截断列表的开头),例如以某种方式显示QStringList
,我可以在其中存储这些行(s.t。我可以轻松地erase(0)
)?
或者QPlainTextEdit最终是否最终实现了相关QString大小的上限?
答案 0 :(得分:12)
显然属性maximumBlockCount
正是我所需要的:
如果要限制
QPlainTextEdit
中的段落总数,例如在日志查看器中有用,则可以使用maximumBlockCount
属性。setMaximumBlockCount()
和appendPlainText()
的组合将QPlainTextEdit
转换为有效的日志文本查看器。
供参考:
答案 1 :(得分:8)
几个月前我遇到了完全相同的问题,最后我使用QListView
。虽然使用模型/视图/委托架构更加繁琐,但从长远来看,它的扩展性要好得多。例如,一旦基本体系结构到位,添加仅显示错误或警告条目的过滤器变得微不足道,或者创建委托以使错误条目的背景被涂成红色也很简单。