Доступ к QTextHtmlImporter в PyQt4 - PullRequest
       13

Доступ к QTextHtmlImporter в PyQt4

1 голос
/ 01 ноября 2011

Я пишу кроссплатформенное приложение на PyQt4.Для конкретной функции я хотел бы получить доступ к QTextHtmlImporter классу Qt4.В 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.Есть ли другой способ сделать это?

1 Ответ

2 голосов
/ 01 ноября 2011

QTextHtmlImporter даже не является частью API Qt4, поэтому короткий ответ: нет, в PyQt4 нет доступа к нему.

Конечно, вы можете попытаться перенести код на PyQt4, но я предполагаю, что это будет нетривиальной задачей.

Вопрос: почему вы думаете, что вам нужно это сделать?

Почему вы не можете использовать QTextCursor.insertHtml или QTextDocumentFragment.fromHtml ?

EDIT

Вот пример того, как установить 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_())
...