Qt QPlainTextEdit撤销后重做功能失效问题求助
QPlainTextEdit重做(CTRL+Y)失效问题排查与解决
问题描述
在QPlainTextEdit窗口输入内容后,按下CTRL+Z可正常完成撤销操作,但按下CTRL+Y执行重做时无任何响应。测试代码如下:
#!/usr/bin/env python3 # 撤销(CTRL+Z)后,重做(CTRL+Y)无法恢复文本 import sys from PySide6.QtWidgets import QApplication, QMainWindow, QPlainTextEdit from PySide6.QtCore import QSize class ExampleWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.b.insertPlainText("示例文本1\n示例文本2\n示例文本3") self.b.resize(440,240) if __name__ == "__main__": app = QApplication(sys.argv) w = QMainWindow() w.setMinimumSize(QSize(440, 240)) w.setWindowTitle("QPlainTextEdit 撤销/重做示例") edit = QPlainTextEdit(w) edit.insertPlainText("示例行1\n示例行2\n示例行3") edit.resize(440,240) print("撤销/重做功能已启用: ", edit.isUndoRedoEnabled()) w.show() sys.exit(app.exec())
问题原因
QPlainTextEdit默认支持撤销/重做功能,但在部分操作系统或环境中,CTRL+Y并未被默认绑定到重做动作;或是系统全局快捷键与该组合键冲突,导致无法触发QPlainTextEdit的redo操作。另外需注意:只有执行过有效的撤销操作(即重做栈中有可恢复的内容)时,重做功能才会生效。
修复方案
手动为QPlainTextEdit的redo动作绑定CTRL+Y快捷键,确保跨环境的一致性。修改后的代码如下:
#!/usr/bin/env python3 # 修复QPlainTextEdit的重做(CTRL+Y)问题 import sys from PySide6.QtWidgets import QApplication, QMainWindow, QPlainTextEdit from PySide6.QtCore import QSize from PySide6.QtGui import QKeySequence if __name__ == "__main__": app = QApplication(sys.argv) w = QMainWindow() w.setMinimumSize(QSize(440, 240)) w.setWindowTitle("QPlainTextEdit 撤销/重做示例") edit = QPlainTextEdit(w) edit.insertPlainText("示例行1\n示例行2\n示例行3") edit.resize(440,240) # 为重做动作绑定CTRL+Y和CTRL+SHIFT+Z快捷键 redo_action = edit.redoAction() redo_action.setShortcuts([QKeySequence("Ctrl+Y"), QKeySequence("Ctrl+Shift+Z")]) print("撤销/重做功能已启用: ", edit.isUndoRedoEnabled()) w.show() sys.exit(app.exec())
验证步骤
- 运行修改后的代码,在文本框中输入新内容(比如添加一行
测试文本) - 按下
CTRL+Z撤销输入,此时文本框恢复到初始状态 - 按下
CTRL+Y,即可重做刚才的输入操作,文本框会重新显示添加的测试文本
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

