PySide中Qt.escape的替代方案?

3 投票
1 回答
583 浏览
提问于 2025-04-18 17:28

我正在把一些代码从PyQt移植到PySide,这里面有一个自己写的XML导出器。代码里有很多像这样的行:

Qt.escape(textNote) 

这对我来说是新鲜事。我的PyQt书(Summerfield, 2008)上写:

Qt.escape()函数接收一个QString,并返回一个经过处理的字符串,确保任何XML的元字符都被正确转义。而我们...会把笔记中的段落和换行符转换成它们的Unicode等价形式。

但不幸的是,为了从文本创建XML,escape似乎不再可用了。

我找到的两个来源讨论了这个问题:

http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5#f166611e9788f9dbdff69088d622663e

http://www.kdab.com/automated-porting-from-qt-4-to-qt-5/

不幸的是,他们都建议使用QString.toHtmlEscaped(),但这个方法在PySide中似乎不存在(实际上,QString并不是PySide的一部分)。

最后,四年前的讨论显示,escape并不是他们打算在PySide中支持的功能,在一个bug报告中提到过

经过与其他PySide开发者的讨论,我们决定不导出这个函数,原因如下:

  • 这个函数是QtGui的一部分,如果我们创建一个QtGui.Qt,这会导致QtCore.Qt的一些麻烦。
  • PyQt4也没有导出这个函数。
  • 在Python标准库中有其他函数可以实现相同的目标,比如xml.sax.saxutils.escape()。

所以,我会把这个bug标记为WONTFIX。

似乎回答了我的问题,但这是四年前的事,我想知道现在是否仍然适用。也就是说,PySide真的没有转义功能吗?那么最好的选择是使用saxutils吗?或者在PySide中是否有我忽略的类似toHtmlEscaped的解决方法?

1 个回答

2

每次你想用

Qt.escape(yourText)

时,其实你可以用

from xml.sax.saxutils import escape as escape
escape(yourText)

来实现完全相同的功能。虽然看起来没那么优雅,但它确实能工作。PySide的开发者在四年前对这个问题的初步反应一直保持一致。

撰写回答