一千萬個為什麽

搜索

如何在退出PyQt4應用程序時禁用清除剪貼板?

我有一個簡單的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在剪貼板中存儲某種文本指針而不僅僅是文本。戈登泰勒向我指出了這個討論: http:// old。 nabble.com/Re:-Searching-for-a-very-small-scprit-using-CLIPBOARD-p23246491.html 解釋了發生了什麽。我引用代碼和相關部分的解釋。

在退出應用程序時運行此代碼(例如在closeEvent處理程序中):

   from PyQt4 import QtGui, QtCore
   clipboard = QtGui.QApplication.clipboard()
   event = QtCore.QEvent(QtCore.QEvent.Clipboard)
   QtGui.QApplication.sendEvent(clipboard, event)

這背後的基本概念是默認復制某些東西   進入剪貼板只復制一個指向源的引用/指針   應用。然後當另一個應用程序想要粘貼數據時   從剪貼板中,它從源應用程序請求數據。   調用 OleFlushClipboard 會導致Windows復制真實數據   進入剪貼板而不是引用。雖然這確實導致了   復制圖像時延遲,不應有任何明顯的影響   用字符串。

上面的代碼非常跨平臺,不會對Linux平臺產生任何不良影響。

轉載註明原文: 如何在退出PyQt4應用程序時禁用清除剪貼板?