QTextEdit.insertHtml () очень медленный - PullRequest
2 голосов
/ 25 июня 2010

Я разочаровался в попытках заставить его работать быстрее.

Моя самая большая проблема заключается в том, что когда я вставляю html, приложение замедляется до сканирования.У меня есть индикатор выполнения, и я звоню

QCoreApplication.processEvents()

(кстати, я использую pyqt)

Могу ли я вставить insertHtml () в другой поток, поэтомуу вас не отвечает интерфейс?Как бы я пошел об этом?Я посмотрел в QThread и QThreadPool, и я не совсем уверен, с чего начать.

Ответы [ 2 ]

6 голосов
/ 22 ноября 2011

У меня тоже была эта проблема, вот несколько вещей, которые я сделал, чтобы сделать это быстрее:

TxtBrows->setAcceptRichText(false);
TxtBrows->setContextMenuPolicy(Qt::NoContextMenu);
TxtBrows->setOpenLinks(false);
TxtBrows->setReadOnly(true);
TxtBrows->setUndoRedoEnabled(false);

Это должно избавить от ненужных накладных расходов.

Также при вставке большого количества текста полезно отключать обновления экрана:

setUpdatesEnabled(false);
    TxtBrows->append(SomeBigHTMLString);
setUpdatesEnabled(true);

Это было рекомендовано где-то в документации Qt, но я не могу найти место сейчас.

[Изменить] Я наткнулся на место в Документах (как раз вовремя, чтобы они устарели из QT5 grinn ) http://qt -project.org / doc / qt-4.8 / qwidget.html # updatesEnabled- проп

3 голосов
/ 25 июня 2010

В приложениях с графическим интерфейсом основной поток также называется потоком GUI, потому что это единственный поток, который разрешен выполнять операции, связанные с GUI. - из Qt Docs

Итак, нет. К сожалению, вы не можете выполнить эту операцию в потоке.

Редактировать: Технически это возможно. Я только что написал короткий фрагмент, который сделал это, однако использование объектов Qt GUI таким способом крайне небезопасно.

...