我有一个简单的 PyQt4 应用程序(请参阅下面的代码),它揭示了一个问题:如果我从QLineEdit
并将其复制到剪贴板,然后我只能在应用程序运行时将其粘贴到另一个应用程序。似乎在退出时,PyQt 应用程序会清除剪贴板,因此我无法在应用程序关闭后粘贴文本。
我该怎么做才能避免这个问题?
PyQt 4.4.3 @ Python 2.5 @ Windows XP。这种效果在 PyQt 4.5+ 和 Linux 上也得到了证实。
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
好的,没有完全清除剪贴板的情况发生。只是 QT 在剪贴板中存储某种类型的文本指针,而不仅仅是文本。戈登·泰勒向我指出PyQt 邮件列表上的讨论 https://riverbankcomputing.com/pipermail/pyqt/2009-April/022857.html这解释了发生了什么。我引用代码和解释的相关部分。
在应用程序退出时运行此代码(例如在 closeEvent 处理程序中):
from PyQt4 import QtGui, QtCore
clipboard = QtGui.QApplication.clipboard()
event = QtCore.QEvent(QtCore.QEvent.Clipboard)
QtGui.QApplication.sendEvent(clipboard, event)
这背后的基本概念是默认复制一些东西
到剪贴板中仅复制指向源的引用/指针
应用。然后当另一个应用程序想要粘贴数据时
它从剪贴板请求源应用程序的数据。
呼唤OleFlush剪贴板 http://msdn.microsoft.com/en-us/library/ms679707(VS.85).aspx导致 Windows 复制真实数据
放入剪贴板而不是引用。虽然这确实会导致
复制图像时出现延迟,应该不会产生任何明显的影响
用字符串。
上面的代码是非常跨平台的,不会对 Linux 平台产生任何不良影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)