我已经在派生类中快速实现了移动队列QPlainTextEdit
,但我有一个奇怪的问题。
该代码运行良好,但问题发生在撤消后:如果光标位于行首(并在下一行恢复),则光标不会恢复到先前的位置。如果光标在移动之前位于该行的任何其他位置,则可以正确恢复。
你能对此有所了解吗?谢谢!
from PySide import QtGui, QtCore
from PySide.QtGui import QTextCursor
import sys
class MyTextEdit(QtGui.QPlainTextEdit):
def __init__(self):
super(MyTextEdit, self).__init__()
def keyPressEvent(self, event):
key = event.key()
if key == QtCore.Qt.Key_Up:
mods = event.modifiers()
if mods & QtCore.Qt.ControlModifier and mods & QtCore.Qt.ShiftModifier:
cursor = self.textCursor()
cursor.beginEditBlock()
orig = cursor.position()
cursor.movePosition(QTextCursor.StartOfLine, QTextCursor.MoveAnchor)
n = orig-cursor.position()
cursor.movePosition(QTextCursor.Down, QTextCursor.KeepAnchor)
text = cursor.selectedText()
if len(text) == 0:
cursor.endEditBlock()
else:
cursor.removeSelectedText()
cursor.movePosition(QTextCursor.Up, QTextCursor.MoveAnchor)
cursor.insertText(text)
cursor.movePosition(QTextCursor.Up, QTextCursor.MoveAnchor)
cursor.movePosition(QTextCursor.Right, QTextCursor.MoveAnchor, n)
cursor.endEditBlock()
self.setTextCursor(cursor)
return QtGui.QPlainTextEdit.keyPressEvent(self, event)
app = QtGui.QApplication(sys.argv)
form = MyTextEdit()
form.setPlainText("""\
let zero f x = x
let succ n f x = f (n f x)
let one = succ zero
let two = succ (succ zero)
let add n1 n2 f x = n1 f (n2 f x)
let to_string n = n (fun k -> "S" ^ k) "0"
let _ = to_string (add (succ two) two)
""")
form.show()
app.exec_()