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行分に相当するらしい。自信無いけど。
◎ 論理行、物理行と呼べればいいのだけど。 :
_物理行と論理行 - 永遠に未完成
を読む限り、定義がグチャグチャらしく。これは困った…。
[ ツッコむ ]
以上です。