猿问

指定从 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. 切换到文本编辑器、网络浏览器等并粘贴就可以了。此外,如果我然后选择我粘贴的内容,复制,并将其粘贴到 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 以特定格式输出文本?(或者对问题可能是什么的任何见解,如果不是的话?)


慕容3067478
浏览 134回答 1
1回答

忽然笑

虽然我仍然不知道 PySide2 自己的机制是否可行,但我找到了一个非常简单的解决方案:https://pypi.org/project/pyperclip/import&nbsp;pyperclip pyperclip.copy(text_to_copy)然后剪贴板包含一个 UTF-8 版本,一切正常。
随时随地看视频慕课网APP

相关分类

Python
我要回答