2010-06-25 4 views
2

실제로 더 빨리 진행하기 위해 포기했습니다.QTextEdit.insertHtml() 매우 느립니다.

가장 큰 문제는 html을 삽입 할 때 응용 프로그램이 크롤링 속도가 느려진다는 것입니다. 는 내가 진행 막대가 있고, 나는

내가 다른 스레드에 insertHTML를()를 넣을 수 (나는 그런데, PyQt는을 사용하고 있습니다)

QCoreApplication.processEvents() 

를 호출, 그래서 나는이 없습니다 응답하지 않는 인터페이스? 어떻게 생각하나요? QThread와 QThreadPool을 살펴 봤는데 어디에서 시작해야할지 모르겠습니다. GUI 응용 프로그램에서

+2

(그들을 QT5 grinn 구식이 될 시간에 맞춰)

[편집]

은 내가 당신에게 비밀을 말해 문서에서 자리를 우연히 발견했다. QPlainTextEdit :: setText()도 매우 느립니다. –

+0

QPlainTextEdit에는 setText() 함수가 없습니다. 아마도 QTextEdit :: setText()를 의미할까요? 이 함수는 각 호출에서 텍스트의 문자를 조사하여 삽입 할 텍스트가 HTML인지 일반 텍스트인지 결정하려고 시도 할 때와 같이 사용하지 않아야합니다. 대신 setHtml() 또는 setPlainText()를 사용하십시오. 복잡한 HTML을 사용하지 않는 한 기본 HTML을 지원하는 QPlainText를 살펴보고 QTextEdit보다 훨씬 빠릅니다. –

답변

2

는 메인 스레드 는 또한 GUI 관련 작업을 수행 할 허용되는 유일한 스레드의 때문에 GUI 스레드라고합니다. - from the Qt Docs

그렇습니다. 불행히도 스레드에서 해당 작업을 수행 할 수 없습니다.

편집 : 기술적으로 가능합니다. 방금 Qt GUI 개체를 사용하는 것이 안전하지 않은 짧은 스 니펫을 작성했습니다.

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

불필요한 오버 헤드를 제거해야합니다

나뿐만 아니라이 문제를 가지고
5

, 여기 빨리 만들 내가 한 몇 가지가 있습니다.

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

는 Qt는 문서 어딘가에 권장했지만, 난 그냥 지금 자리를 찾을 수 없습니다 :

또한 화면 업데이트를 해제 그것의 좋은 많은 양의 텍스트를 삽입 할 때. http://qt-project.org/doc/qt-4.8/qwidget.html#updatesEnabled-prop