我正在制作一个小型 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 以特定格式输出文本?(或者对问题可能是什么的任何见解,如果不是的话?)
忽然笑
相关分类