[PySIde] QTextEditの使い方メモ

UI上に、ツールのログを表示するのにTextEditを使用しようとしたのですが
いまいち使い方が分からず苦戦したのでメモ。
怪しい英語読解能力でHelpを調べた事なので間違ってたらすいません

やりたかったのは、TextEditに文字をInsertしつつ、ある一定行数を過ぎたら上から消していく(一定の行数のみTextEditに表示)する…ということ。

キャプチャ

UIファイルは → こちら

とりあえず、ものすごいゴリ押しで作ったソース

ボタンを押すとカウントアップしていく数字をTextEditに1行ずつ追加するサンプル。
10行を越えると、古い方から消えます。

TextEditを操作する場合は、大きく分けて3つの要素があります。

TextEditの文字すべてを司る PySide.QtGui.QTextDocument   クラス
Document内の1行を司る   PySide.QtGui.QTextBlock     クラス(1行をBlockと言う)
カーソル位置を司る       PySide.QtGui.QTextCursor    クラス

Cursor位置を基準に挿入したり削除するのが基本的な動作になるようです。
挿入は、Block単位でも出来るし、Cursor位置を1文字単位で移動して、今のCursor位置に挿入することも出来ます。
カーソル位置移動は、 cursor.movePosition(position) で指定可能で、 文頭、文末等いろいろ指定出来ます。
詳細は、QTextCursor.MoveOperation を参照してください。

で。
挿入は問題なかったのですが、削除側が微妙に困りました。
最大行数を固定するというのは、TextEditの機能にあるものの、最大を超えたらそれ以上はinsert出来なくなってしまいます。

ので、一番古い(Start行)を消す…という動作をしたいので調べたものの良い方法が見つからない。
Documentの全削除は doc.clear() などで可能なのですが、Blockにはclearやremoveっぽいものは見当たらず。
仕方ないので、現在カーソルを頭に移動して、カーソル位置のあるBlockの文字を選択→選択している文字列を削除+1文字(改行コード)削除することで、Block1つ削除を無理矢理実現。
無理やり出来たけど、なんとも気持ち悪い感じになってしました。

もうちょっとスマートな書き方があれば教えてくださいorz (切実

コメントを残す

メールアドレスが公開されることはありません。


*