开发者

QTextEdit.insertHtml() is very slow

I've given up on actually trying to make it go faster.

My biggest problem is that when I'm inserting the html, the application slows down to a crawl. I have a progressbar, and I'm calling

QCoreApplication.processEvents()

(I'm using pyqt, by the way)

Can I put insertHtml() into a different thread, so I don't have an unresponsive interface? How would I go about that? I've looked into QThread and QThreadPool, and I'm not quite sure where 开发者_JAVA百科to begin.


I had this problem as well, here are a few things I did to make it faster:

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

This should get rid of unneeded overhead.

Also when inserting large amounts of text its good to turn off screen updates:

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

This was recommended somewhere in the Qt documentation but I can't find the spot just now.

[Edit] I stumbled across the spot in the Docs (just in time for them to be outdated by QT5 grinn) http://qt-project.org/doc/qt-4.8/qwidget.html#updatesEnabled-prop


In GUI applications, the main thread is also called the GUI thread because it's the only thread that is allowed to perform GUI-related operations. -- from the Qt Docs

So, no. Unfortunately you cannot perform that operation in a thread.

Edit: Technically, it is possible. I just wrote a short snippet that did so, however using Qt GUI objects in that way is highly unsafe.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜