c++ - QTextEdit“预分配”画布大小
问题描述
我正在编写一个简单的文本编辑器客户端,它以块的形式接收给定的文件,而不是一次全部读取。例如,如果我有一个 10,000 行的文件,当我在客户端打开它时,我只会得到前 25 行 + 一些 slop。当我向下滚动文件时,它将动态加载进入视图的行。
当我滚动文件时,我可以动态插入文件内容。但是,我希望 QScrollBar 在打开文件时反映文件的完整大小,而不仅仅是 QTextDocument 的当前内容。
这是屏幕截图的形式:
QTextEdit 和 QScrollBar 最初加载文件时仅包含第一块行。
同样的事情,一旦我滚动到文件的底部并且它的其余部分已经加载。
注意较小的QScrollBar
滑块。
我想知道是否有某种方法可以预设底层画布的大小,即很容易以像素为单位计算整个文档的高度,然后使 QTextEdit 滚动区域具有该大小。最好不必求助于绘画。也欢迎任何其他想法。
解决方案
您需要从以编程方式设置垂直滚动条的范围开始:
textEdit->verticalScrollBar()->setMaximum(numberOfLines);
有关更多详细信息,请参阅文档:QAbstractSlider::setMaximum()
此外,您可能需要在QAbstractSlider::sliderMoved(int)
发出信号时实现自定义行为。这个想法是你的画布保持小,它只提供一个完整文本的小窗口。
推荐阅读
- windows - 如何使用自定义脚本扩展从 Azure 激活 Windows 上的网络驱动器?
- machine-learning - 根据不平衡类的 Precision 和 Recall 值选择哪个模型
- javascript - Flask - 将推荐人政策更改为“无推荐人”?
- python - Python。用 SUM 合并 dict 行
- python - 从快照创建中获取快照 ID
- python - Pip 升级问题 && Pytest 问题 && MAC OS 不合作
- javascript - GWT FlowPanel 不显示内容
- pyspark - spark没有下载hive_metastore jars
- amazon-web-services - 如何在 docker 容器上运行 ansible-playbook 以在 AWS EC2 Ubuntu 实例上执行命令?
- google-app-engine - 具有 Channels websockets 的 Elixir Phoenix 应用程序无法在 Google AppEngin 上运行