指定从Qt应用程序复制的文本格式?粘贴时不知何故使其他应用程序崩溃



我正在制作一个小型的Qt/Pyside2/QML应用程序,其全部目的是方便地生成和复制一些文本以粘贴到另一个程序中。(万一重要,它 https://lackeyccg.com/;我怀疑唯一可能相关的事实是它足够旧,以至于它根本不能很好地与 Unicode 配合使用。我目前运行的是macOS 10.13,以防特定的剪贴板相关。

在 PySide 中,我像这样复制文本:

clipboard = QGuiApplication.clipboard()
clipboard.setText(text_to_copy)

调用clipboard.mimeData().formats()告诉我数据格式为text/plain。切换到文本编辑器、Web 浏览器等并粘贴就可以了。此外,如果我选择我粘贴的内容,复制,然后将其粘贴到 LackeyCCG 中,一切都会很好。不幸的是,在Qt中复制后直接粘贴到LackeyCCG中会使Lackey崩溃。

我已经用几个测试字符串验证了这一点,排除了非ASCII字符或换行符等可能的原因;似乎唯一会导致崩溃的是空字符串。

我猜这与Qt提供的文本格式有关。通过在命令行上运行osascript -e 'the clipboard as record' | less,我可以检查系统剪贴板的内容。从多个文本编辑器以及 Chrome 复制的文本包含格式<<class utf8>><<class ut16>>string。(奇怪的是,string版本的换行符被回车符取代。相比之下,从我的Qt应用程序复制的文本包含stringUnicode text<<class ut16>>(其string具有普通换行符(。

我对文本编码的细节没有最牢固的把握,但这里的操作差异似乎是缺少 UTF-8 版本。显然,大多数现代应用程序都足够聪明,可以解释Qt给他们的东西,即使它与大多数应用程序显然产生的不同。但是对于我们这些试图粘贴到废弃软件中的人来说,有没有办法强制Qt/PySide2以特定格式输出文本?(或者对问题可能是什么的任何见解,如果不是这样的话?

虽然我仍然不知道 PySide2 自己的机制是否可行,但我发现了一个非常简单的解决方案:https://pypi.org/project/pyperclip/

import pyperclip
pyperclip.copy(text_to_copy)

然后剪贴板包含 UTF-8 版本,一切正常。

相关内容

最新更新