2012/09/28(金) [n年前の日記]
#1 [python] QTextCursorを勉強中
PyQtを勉強中。
行の複製をやりたかったのだけど、たぶんできたっぽい。
QtextCursor.columnNumber() で、行頭から何文字目にカーソルがあるのか取得できるかなと思ったけれど。値を確認してみたら、あくまで見た目の文字数で。1行が長くて折り返し表示されている状態では、行頭から何文字目なのか取得できないので、判定等には使えない感じ。どうやら QtextCursor においては、block という種類が見た目ではない1行分に相当するらしい。自信無いけど。
行の複製をやりたかったのだけど、たぶんできたっぽい。
def duplicate_line(self):
"""行を複製"""
self.textEdit = self.ui.editor_window
c = self.textEdit.textCursor()
qb = c.block() # QTextBlock を取得
qs = qb.text() # QTextBlock内の文字列を取得
c.beginEditBlock() # Undo履歴の制御
if not c.atBlockStart():
# Blockの頭(=行頭)にカーソルが無いので、行頭にカーソルを移動
c.movePosition(QtGui.QTextCursor.StartOfBlock)
c.insertText(qs + "\n") # Block文字列を挿入
c.endEditBlock() # Undo履歴の制御
- 見た目ではない(折り返し処理で折り返されてない)1行分を取得したい。 → QTextCursor.block()
- 1行分のテキストを取得したい。 → QTextBlock.text()
- 現在のカーソル位置が行頭にあるかどうかを調べたい。 → QTextCursor.atBlockStart()
QtextCursor.columnNumber() で、行頭から何文字目にカーソルがあるのか取得できるかなと思ったけれど。値を確認してみたら、あくまで見た目の文字数で。1行が長くて折り返し表示されている状態では、行頭から何文字目なのか取得できないので、判定等には使えない感じ。どうやら QtextCursor においては、block という種類が見た目ではない1行分に相当するらしい。自信無いけど。
◎ 論理行、物理行と呼べればいいのだけど。 :
_物理行と論理行 - 永遠に未完成
を読む限り、定義がグチャグチャらしく。これは困った…。
[ ツッコむ ]
以上です。