0

我已经在派生类中快速实现了移动队列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_()
4

0 回答 0