python - 在 PyQt4 中访问 QTextHtmlImporter

标签 python qt qt4 pyqt pyqt4

我正在用 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.insertHtmlQTextDocumentFragment.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/

相关文章:

python - 在 numpy 中 take 的多维等价物是什么

c++ - 如何检索具有完整路径的文件名以将数据写入其中

android - 解决 QString 移动错误

multithreading - 在非 GUI 线程中创建 QWidget

c++ - QDockWidget导致qt崩溃

qt4 - Qt Creator 中的 *.qss 文件没有语法高亮显示?

java - Java PriorityQueue 中的 Offer/peek/poll 转换为 Python 是什么?

python2.7 - 从字典中获取值,其中键是变量

c++ - Windows(以及 OS X、Linux)上 Qt 中的高分辨率周期性计时器

Python 列表理解 - 以 2+ 系列为条件