应用参数或属性的函数的名称通常以
set
.
canPaste()
只是告诉你剪贴板上的内容是否可以粘贴到文本编辑中。
解决办法是覆盖
insertFromMimeData()
,每当有人试图
粘贴
满足,什么都不做:
class NoPasteTextEdit(QtWidgets.QTextEdit):
def insertFromMimeData(self, source):
pass
请注意,上下文菜单仍将显示“粘贴”操作,因此您可能应该禁用该操作,这可以通过覆盖
canInsertFromMimeData()
而且总是返回错误:
def canInsertFromMimeData(self, source):
return False
不过,请注意,这将完全破坏通过剪贴板进行内部编辑的默认行为,包括拖动文本选择以将其移动到另一个位置。
一种可能的替代方法是覆盖
createMimeDataFromSelection()
,获取默认实现的QMimeData并添加自定义格式,这样我们就可以签入
insertFromMimeData()
和
来自Mimedata的Caninsertfrom()
是否在内部生成“粘贴”数据,并最终接受或忽略它。
class NoPasteTextEdit(QtWidgets.QTextEdit):
def canInsertFromMimeData(self, source):
return source.hasFormat('InternalClipboard')
def insertFromMimeData(self, source):
if source.hasFormat('InternalClipboard'):
super().insertFromMimeData(source)
def createMimeDataFromSelection(self):
# the mime object returned from the default implementation does
# not allow to set further arbitrary data, so we just create a
# standard QMimeData and fill it with the existing data
mime = QtCore.QMimeData()
src = super().createMimeDataFromSelection()
for fmt in src.formats():
mime.setData(fmt, src.data(fmt))
mime.setData('InternalClipboard', QtCore.QByteArray())
return mime