我的问题与此处发现的几乎完全相同: Override shouldInterruptJavaScript in QWebPage with PySide
在我的情况下,虽然我想覆盖QLineEdit上的复制和粘贴插槽
import sys
from PySide import QtGui, QtCore
class myLineEdit(QtGui.QLineEdit):
# FIXME: This is not working, the slot is not overriden!
@QtCore.Slot()
def copy(self):
print 'overridden copy event'
App.clipboard().setText('customized text')
return False
@QtCore.Slot()
def paste(self):
print 'overridden paste event'
self.setText('customized text')
return False
if __name__ == "__main__":
App = QtGui.QApplication(sys.argv)
Widget = myLineEdit()
Widget.show()
cmenu = Widget.createStandardContextMenu()
sys.exit(App.exec_())
我正在使用Python 2.7.3和PySide 1.2.2
我不知道这些方法是否应该是可以覆盖的,但是我找不到任何说它们不应该的文档。
我也找到了这个页面 http://qt-project.org/faq/answer/is_it_possible_to_reimplement_non-virtual_slots
该页面解释了某些类型的槽如何通过在初始化对象时调用的函数(或者不熟悉C ++的东西)获取指向它们的指针。
遵循这个逻辑我在上面添加了createStandardContextMenu()调用,希望它至少会重新初始化插槽,但是没有运气。
我做错了吗?或者我应该尝试提交错误报告吗?
答案 0 :(得分:1)
您不能以Qt内部调用它们的方式覆盖QLineEdit.copy
或QLineEdit.paste
。
通常,您只能有效地覆盖或重新实现定义为虚拟的Qt函数。 Qt文档将始终指定是否属于这种情况,对于QLineEdit
,没有public slots以这种方式定义。
也没有简单的解决方法。有许多不同的方法可以调用复制和粘贴操作(或它们的等价物),例如键盘快捷键,上下文菜单,拖放等等。可以这样做:但是要做到很多工作< em>完全控制所有这些操作。所以在决定如何继续之前,你需要仔细考虑你想要达到的目标。