首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt滚动如何产生错觉效应?

Qt滚动如何产生错觉效应?
EN

Stack Overflow用户
提问于 2017-05-04 17:46:21
回答 2查看 117关注 0票数 0

我有一个QPlainTextEdit,在其中动态地追加新行。如果在任何给定时间,QPlainTextEdit中当前的行数为500行,则删除最老的行,并保持行数不变。

我们可以很容易地通过使用以下方法来实现这一点:

代码语言:javascript
复制
 ui->plainTextEdit->setMaximumBlockCount(500);

好的。但我不想让用户知道,当达到最大块数时,我会删除行。这意味着我必须缩小滚动条的大小,就像它会自动减小一样,当我们时,设置setMaximumBlockCount属性。

但是,由于我们已经设置了setMaximumBlockCount属性,在达到最大块计数后,滚动条的大小将保持不变。

如果我能够缩小滚动条的大小,那么我们将成功地给出我们没有删除任何线条的错觉。

我的第二个问题是:

如果我们成功地给用户这种错觉效果,并且说我们加载了10000行。

因此,我们的QPlainTextEdit,目前将存储10000行的最后500行。但是由于错觉效应,用户会假设他可以查看所有的10000行。

因此,当用户向上滚动时,我不得不维护错觉效果。这意味着如果用户向上滚动,我需要显示删除的旧行。

由于QPlainTextEdit没有prepend操作,所以我这样做的方法是将行保存在文件中,必要时从文件中读取行,然后重新填充整个QPlainTextEdit。但最重要的是,我们必须保持滚动条,即使是当我们完全重新填充的QPlainTextEdit,以保持错觉效果。

如有任何想法、链接或答案,将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2017-05-04 20:57:20

似乎您正在实现一个日志查看器。在这种情况下,使用QPlainText非常麻烦,因为它非常慢。我建议使用QListViewconfigure it so that it's fast

票数 0
EN

Stack Overflow用户

发布于 2017-05-05 09:20:44

我在你的另一个问题上给你提供了完美的解决方案:https://stackoverflow.com/a/43771056/1387438

子类QAbstractListModel在那里实现缓存。读取单元格值时,您将从缓存中获取数据,并在缓存中不存在值时对其进行更新。

调整QTableView,通过改变委托来实现所需的细胞可视化。如果QListView记得在替代答案中以品脱的形式给出tweak it properly,但是看起来无论如何您都应该使用QTableView

在另一个答案中,有大型文件十六进制查看器的示例,因此您应该对文本使用相同的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43789582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档