我正在用 PyQt4 编写一个跨平台应用程序。对于特定功能,我想访问 Qt4 的 QTextHtmlImporter
类。 PyQt4 中没有直接可用的 python 适配器类。该类是 src/gui/text/qtextdocumentfragment_p.h 文件的一部分。有什么方法可以在 Python 中访问它吗?
我想修改QTextDocument.setHtml()
,代码为:
void QTextDocument::setHtml(const QString &html) {
Q_D(QTextDocument); setUndoRedoEnabled(false);
d->clear();
QTextHtmlImporter(this, html).import();
setUndoRedoEnabled(true);
}
到
void QTextDocument::setHtml(const QString &html) {
Q_D(QTextDocument);
QTextHtmlImporter(this, html).import();
}
基本上设置 HTML 而不清除历史记录。我计划通过使用 PyQt4 的 QTextDocument
派生类覆盖 setHtml
函数来实现此目的。还有其他方法可以做到这一点吗?
最佳答案
QTextHtmlImporter
甚至不是 Qt4 API 的一部分,因此简短的答案是:不,无法在 PyQt4 中访问它。
当然,您可以尝试将代码移植到 PyQt4,但我猜这将是一项不简单的任务。
问题是:您认为为什么需要这样做?
为什么不能使用 QTextCursor.insertHtml或QTextDocumentFragment.fromHtml ?
编辑
下面是如何在文本文档中设置 html 而不清除撤消历史记录的示例:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
layout = QtGui.QVBoxLayout(self)
self.edit = QtGui.QTextEdit(self)
self.undo = QtGui.QPushButton('Undo')
self.redo = QtGui.QPushButton('Redo')
self.insert = QtGui.QPushButton('Set Html')
layout.addWidget(self.edit)
layout.addWidget(self.undo)
layout.addWidget(self.redo)
layout.addWidget(self.insert)
self.undo.clicked.connect(self.edit.undo)
self.redo.clicked.connect(self.edit.redo)
self.insert.clicked.connect(self.handleInsert)
self.edit.append('One')
self.edit.append('Two')
self.edit.append('Three')
def handleInsert(self):
cursor = QtGui.QTextCursor(self.edit.document())
cursor.select(QtGui.QTextCursor.Document)
cursor.insertHtml("""<p>Some <b>HTML</b> text</p>""")
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
关于python - 在 PyQt4 中访问 QTextHtmlImporter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971095/