开发者

QTextEdit.insertHtml() is very slow

开发者 https://www.devze.com 2023-01-04 15:09 出处:网络
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'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

精彩评论

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