我有一个QPlainTextEdit
,我在其中动态添加新行。如果在任何给定时间当前QPlainTextEdit
中的行数变为500,我删除最旧的行并保持行数不变。
我们可以通过以下方式轻松实现这一目标:
ui->plainTextEdit->setMaximumBlockCount(500);
行。但我不希望用户知道在达到最大块数时我删除了行。这意味着我必须减小滚动条的大小,就像它会自动减少一样,当我们不时,设置setMaximumBlockCount
属性。
但是因为我们设置了setMaximumBlockCount
属性,所以在达到最大块数后滚动条的大小将保持不变。
如果我能够减小滚动条的大小,那么我们将成功地假设我们没有删除任何行。
我的第二个问题是:
如果我们成功地向用户提供这种幻觉效果并说我们加载了10000行。
所以我们的QPlainTextEdit
目前会存储10000行的最后500行。但由于幻觉效应,用户将假设他可以查看所有10000行。
因此,当用户向上滚动时,我必须保持幻觉效果。这意味着如果用户向上滚动,我需要显示已删除的旧行。
由于QPlainTextEdit
没有prepend
操作,我这样做是通过保存文件中的行,并在必要时从文件中读取行并重新填充整个QPlainTextEdit
。但主要的是我们必须保持滚动条,即使我们完全重新填充QPlainTextEdit
,以保持幻觉效果。
任何想法或链接或答案都将不胜感激。
答案 0 :(得分:0)
您似乎正在实施日志查看器。在这种情况下,使用var data = [
{fieldName: 'title', valid: false},
{fieldName: 'description', valid: true},
{fieldName: 'cityId', valid: false},
{fieldName: 'hostDescription', valid: false},
]
var newData = data.map(el => {
if(el.fieldName == 'cityId')
return Object.assign({}, el, {valid:true})
return el
});
this.setState({ data: newData });
非常麻烦,因为它非常慢。我建议您使用QPlainText
和configure it so that it's fast。
答案 1 :(得分:0)
我在您的另一个问题中为您提供了完美的解决方案:https://stackoverflow.com/a/43771056/1387438
子类QAbstractListModel
在那里实现缓存。读取单元格值时,您将从缓存中获取数据,并在缓存中不存在值时更新它。
调整QTableView
,通过改变委托来实现细胞所需的可视化。
如果QListView
在备用答案中记得要tweak it properly,那么看起来你应该使用QTableView
。
在其他答案中,有大文件十六进制查看器的示例,因此您应该使用与文本相同的方法。