2

各行がライブラリを介して生成される巨大なテキストバッファがあり、QPlainTextEditウィジェットがその一部をQScrollBarを使用してプログラムでロードできるようにしたいです。

これが私が思ったことです:

  • push_backを使用してベクトル<文字列>の各行をロードし、行の総数を含むカウント変数を格納します
  • QScrollBarを使用して、その値の位置と他のいくつかの行をロードして、編集ボックス領域を埋めます

これは機能するかもしれませんが、要素用のスペースを予約したとしても、ベクトル内のすべての行をプッシュバックするのは非常に遅いことがわかりました。代わりにかなり高速な文字列に各行を追加する場合、各行を「\n」文字で分割する必要があります。

高速にプッシュバックする方法、または巨大なテキストバッファにn行をすばやく取得できる方法が必要です

4

1 に答える 1

0

私も同様の問題を抱えていましたが、おそらく探しているのは遅延インスタンス化です。ファイルの総行数を取得します。テキストボックスにはn行しか表示されないため、スクロールバーがyの位置(y行)に移動すると、ファイルから[y、n + y]行のみが表示されます

もう少しバッファが必要な場合は、データを論理ページに分割することを検討してください。つまり、「ページ」サイズが 200 行の場合、スクロールバーを介して 300 行目に移動すると、ページ 2 をロードすることがわかります。

ファイルを 1 行ずつ読み取るのは、常に線形時間になります。しかし、プログラムの速度が低下するのは、大量のデータをメモリに保持するためです。

于 2013-07-10T05:33:55.437 に答える