只是对在 Web 浏览器中滚动复杂的内容(例如应用程序)感到好奇。假设我使用的是 Qt 和 C++。这不是“如何”的问题,而更像是“它是如何工作的”?完全源于我好奇的非理性问题。
我做了一个小实验。
- 创建了 800x60000 像素的大型 QWidget。
- 添加了 300 个 800x200 像素的 QWidget,它们正在使用 QPainter 进行绘画。当调用paintEvent() 时,每个小部件都会将其唯一名称打印到控制台。
- 添加 (1.) 到 QScrollArea 800x800。
- 滚动时,我注意到仅重绘未完全显示在屏幕上的小部件。一次只有 1 个小部件(场景:http ://savepic.ru/2670640.jpg )。所以 QScrollArea (或 QWidget?谁决定要重绘什么小部件?)是聪明的 - 我们没有加载 CPU 来一直重绘所有 300 个小部件或存储 800x60000 像素图的内存消耗(-;
假设我想使用鼠标在我的“网页”上选择文本和其他元素。所以我希望能够标记它们(通过改变背景)。我将如何实施?不同的网络浏览器如何做到这一点?选择图片、文本、表格...我应该考虑跟踪鼠标并在元素和我的自定义小部件后面绘制灰色/蓝色/粉红色背景框吗?
我有另一个实验 - 显示一堆消息。方案是相同的,除了这里没有使用 QPainter - 只有 QLabels、QTextExits、QPushButtons(场景:http ://savepic.ru/2632728.jpg )。我可以为 QLabel 设置一个标志 SelectableByMouse,但我如何选择多于 1 条消息?
您可以建议我使用一些 Qt HTML 渲染器,但这不是“它是如何工作的”的答案。