Просто любопытно прокрутить сложный контент в веб-браузерном приложении.Предположим, я использую Qt и C ++.Это не вопрос «как», а скорее «как это работает»?Полностью получено из моих любопытных иррациональных вопросов.
Я провел небольшой эксперимент.
- Создал большой QWidget 800x60000 px.
- Добавил 300 QWidgets 800x200 px, которые рисуют сами, используяQPainter.Каждый виджет выводит свое уникальное имя на консоль при вызове paintEvent ().
- Добавлено (1.) в QScrollArea 800x800.
- При прокрутке я замечаю перерисовку только тех виджетов, которые не отображаются полностьюна экране.Это только 1 виджет за раз (сцена: http://savepic.ru/2670640.jpg). Так что QScrollArea (или QWidget? Кто решает, какой виджет перерисовывать?) Умен - у нас нет загруженного ЦП, перерисовывающего все 300 виджетов все время или памятьпотребление хранения 800x60000 pixmap (-;
Предположим, я хочу использовать мышь для выделения текста и других элементов на моей «веб-странице». Поэтому я хочу иметь возможность пометить их (путем изменения фона).Как бы я это реализовал? Как разные веб-браузеры делают это? Выбор картинок, текста, таблиц ... Стоит ли думать об отслеживании мыши и рисовании серых / синих / розовых фоновых полей за элементами и моими пользовательскими виджетами?
У меня есть другой эксперимент - отображение стека сообщений. Схема та же, за исключением того, что QPainter здесь не используется - только QLabels, QTextExits, QPushButtons (scene: http://savepic.ru/2632728.jpg). Я могу установить флаг SelectableByMouse для QLabel, но каквыбрать более 1 сообщения?
Вы можете предложить мне использовать какой-нибудь рендерер Qt HTML, но это не ответ«Как это работает».