为了账号安全,请及时绑定邮箱和手机立即绑定

指定从 Qt 应用程序复制的文本格式?粘贴时以某种方式使其他应用程序崩溃

指定从 Qt 应用程序复制的文本格式?粘贴时以某种方式使其他应用程序崩溃

慕容3067478 2023-02-15 16:32:48
我正在制作一个小型 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 应用程序复制的文本包含string, Unicode text, 和<<class ut16>>(并且它string有普通的换行符)。我对文本编码的细节没有最严格的把握,但这里的操作差异似乎可能是缺少 UTF-8 版本。显然,大多数现代应用程序都足够聪明,可以解释 Qt 提供给它们的内容,即使它与大多数应用程序显然产生的内容不同。但是对于我们这些试图粘贴到废弃软件中的人来说,有没有办法强制 Qt/PySide2 以特定格式输出文本?(或者对问题可能是什么的任何见解,如果不是的话?)
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

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

import pyperclip
pyperclip.copy(text_to_copy)

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


查看完整回答
反对 回复 2023-02-15
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信