14

主な部分がQPlainTextEditである GUI アプリケーションがあります。アプリケーションのログを表示するために使用され、関連するテキストは行ごとに無限に大きくなります。

アプリケーションは非常に長時間実行することを目的としているため、このログに割り当てられるメモリを制限する必要があります。したがって、到達したときに履歴が切り捨てられることを確認するmaxNumLinesまたはmaxNumCharactersパラメーターが必要です。つまり、新しい行が追加されると、見出し行が削除されます (別名ログローテーション)。

これを達成するために、関数を見つけました

// get the associated text
QString toPlainText () const

// set the associated text
void setPlainText ( const QString & text )

したがって、このテストされていないコードのようなものは、おそらくうまくいくでしょう:

QString &tmp = pte.toPlainText();
while (tmp.size() > maxNumCharacters) {
  // remove lines from the head of the string until the desired size is reached
  // removes nothing if "\n" could not be found
  tmp.remove(0, tmp.indexOf("\n")+1);
}
pte.setPlainText( tmp );

これは、から最初の行を削除する方法QPlainTextEditですか? おそらく、このタスクにより適した他のQt Text GUI要素がありますか(最大行数を設定し、リストの先頭で切り捨てQStringListますerase(0))。

それとも QPlainTextEdit は最終的に、関連付けられた QString のサイズの上限を最終的に実装しますか?

4

2 に答える 2

18

明らかに、プロパティmaximumBlockCountはまさに私が必要としているものです:

QPlainTextEditたとえばログビューアで役立つように、の段落の総数を制限したい場合は、maximumBlockCountプロパティを使用できます。との組み合わせはsetMaximumBlockCount()、ログテキストの効率的なビューアになりますappendPlainText()QPlainTextEdit

参考のために:

于 2012-06-20T09:33:53.103 に答える
9

私は1か月前にまったく同じ問題を抱えていましたが、結局はを使用しましたQListView。モデル/ビュー/デリゲートアーキテクチャを使用するのは少し面倒ですが、長期的にははるかに優れたスケーリングを実現します。たとえば、基本的なアーキテクチャが整ったら、エラーまたは警告エントリのみを表示するフィルタを追加することは簡単になります。または、エラーエントリの背景が赤く塗られるようにデリゲートを作成することも簡単です。

于 2012-06-19T09:24:27.733 に答える