アプリケーションのような Web ブラウザー内で複雑なコンテンツをスクロールすることに興味があります。Qt と C++ を使用しているとします。これは「どのように」という質問ではなく、「どのように機能するか」というようなものですか? 完全に私の好奇心の不合理な質問から導き出されたものです。
小さな実験をしました。
- 800x60000 px の大きな QWidget を作成しました。
- QPainter を使用して自分自身をペイントする 300 個の QWidgets 800x200 px を追加しました。paintEvent() が呼び出されると、各ウィジェットは固有の名前をコンソールに出力します。
- (1.) QScrollArea 800x800 に追加。
- スクロールすると、画面に完全に表示されていないウィジェットのみが再描画されることに気付きます。一度に 1 つのウィジェットのみです (シーン: http://savepic.ru/2670640.jpg )。したがって、QScrollArea (または QWidget? 誰がどのウィジェットを再描画する必要があるのか?) はスマートです。300 個のウィジェットすべてを常に再描画するために CPU をロードしたり、800x60000 ピックスマップ (-;
マウスを使用して、「Web ページ」のテキストやその他の要素を選択するとします。だから私はそれらを(背景を変えることによって)マークできるようにしたい。どうすればそれを実装できますか? どのように異なる Web ブラウザがそれを行うのですか? 画像、テキスト、表を選択しています... マウスを追跡し、要素とカスタム ウィジェットの背後に灰色/青/ピンクの背景ボックスを描画することを検討する必要がありますか?
別の実験があります-メッセージのスタックを表示します。ここでは QPainter が使用されていないことを除いて、スキームは同じです。QLabels、QTextExits、QPushButtons (シーン: http://savepic.ru/2632728.jpg ) のみです。QLabel にフラグ SelectableByMouse を設定できますが、複数のメッセージを選択するにはどうすればよいですか?
Qt HTML レンダラーを使用するように提案することもできますが、これは「どのように機能するか」に対する答えではありません。