只是对在Web浏览器中滚动复杂内容感到好奇 - 就像应用程序一样 . 让我们假设我使用的是Qt和C.这不是“怎么样”的问题,而更像是“它是如何工作的”?完全源于我的好奇心非理性问题 .

我做了小实验 .

  • 创建了大型QWidget 800x60000 px .

  • 添加了300个QWidgets 800x200 px,它们使用QPainter绘制自己 . 调用paintEvent()时,每个窗口小部件都会将其唯一名称输出到控制台 .

  • 将(1.)添加到QScrollArea 800x800 .

  • 滚动时,我注意到只重绘了屏幕上未完全显示的小部件 . 它一次只有一个小部件(场景:http://savepic.ru/2670640.jpg) . 那么QScrollArea(或QWidget?谁想要重绘什么小部件?)是聪明的 - 我们没有CPU加载重绘所有300小部件一直或内存消耗存储800x60000像素图( - ;

让我们假设我想使用鼠标在我的“网页”上选择文本和其他元素 . 所以我希望能够标记它们(通过改变背景) . 我该如何实现?不同的Web浏览器是如何做到的?选择图片,文字,表格...我是否应该考虑跟踪鼠标并在元素和我的自定义小部件后面绘制灰色/蓝色/粉红色背景框?

我有另一个实验 - 显示一叠消息 . 该方案是相同的,除了这里没有使用QPainter - 只有QLabel,QTextExits,QPushButtons(场景:http://savepic.ru/2632728.jpg) . 我可以为QLabel设置一个标志SelectableByMouse,但是如何选择多条消息呢?

你可以建议我使用一些Qt HTML渲染器,但这不是'它是如何工作'的答案 .