我有一个GUI应用程序,其主要部分是一个QPlainTextEdit。它用于显示应用程序的日志,因此相关联的文本将无限地逐行增长。
由于应用程序的运行时间很长,我需要限制分配给这个日志的内存。因此,我希望有一些maxNumLines或maxNumCharacters参数,以确保到达时历史记录将被截断,即当新行被追加时,头行将被删除。原木旋转)。
为了实现这一点,我找到了以下功能
// 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文本GUI元素(设置最大行数并在列表顶部截断),例如以某种方式显示一个QStringList,我可以在其中存储行(s.t )。我可以很容易的erase(0))?
还是QPlainTextEdit最终实现了关联QString大小的上限?
发布于 2012-06-20 09:33:53
显然,属性maximumBlockCount正是我所需要的:
如果希望限制
QPlainTextEdit中的段落总数(例如,它在日志查看器中很有用),则可以使用maximumBlockCount属性。setMaximumBlockCount()和appendPlainText()的结合使QPlainTextEdit成为日志文本的有效查看器。
供参考:
发布于 2012-06-19 09:24:27
一个月前,我遇到了同样的问题,最后我使用了一个QListView。虽然使用模型/视图/委托体系结构比较繁琐,但从长远来看,它的扩展性要好得多。例如,一旦基本架构到位,添加一个只显示错误或警告条目的筛选器就变得非常简单,或者创建一个委托,以便将错误条目的背景漆成红色也很简单。
https://stackoverflow.com/questions/11097939
复制相似问题