2012-03-30 4 views
1

QTextEdit 개체에 50 개의 행이있는 테이블이 있습니다. 50 개의 행을 1 씩 1 개 제거한 다음 50 개의 행을 1 씩 추가하면 1-2 초가 걸립니다.QTextEdit 행 삽입 및 제거가 매우 느립니다. 어쨌든 더 빨리 만들 수 있을까요?

이 작업 속도를 높이는 방법이 있습니까?

최종 결과 만 확인하면됩니다. (즉, 제거를 마친 후 행 추가).

시간이 걸리는 이유를 정확히 알기 때문에 나는 주변을 찾을 수 없습니다. 여기

그것을 테스트하기 위해 몇 가지 간단한 코드입니다

//ui->textEdit is the text edit control 
//This will insert 500 rows then remove 499 rows. 

QTextCursor textCursor = ui->textEdit->textCursor(); 
textCursor.setPosition(1); 
if(textCursor.currentTable() !=0) 
{ 
    for(int i =0;i<500;i++) 
    { 
     textCursor.currentTable()->insertRows(1,1); 
    } 
    for(int i =0;i<499;i++) 
    { 
     textCursor.currentTable()->removeRows(1,1); 
    } 
} 
+0

작업을 시작하기 전에 textedit 개체를 숨기려고 (setHidden (true)) 시도하고, 마지막에 setShown (true)을 호출 할 수 있습니다. Qt 위젯은 표시되는 동안 만 그려지며 그렇지 않으면 update() 신호가 무시됩니다. 어쩌면 그리기 때문일 것입니다 ... – ypnos

+2

일반적으로 ypnos가 설명하는 트릭을 수행하기 위해'setUpdatesEnabled()'를 사용하는 것이 더 좋습니다. – Chris

+0

그냥 테스트했습니다. setHidden (true), setShown (true) 영향을주지 않습니다. setUpdatesEnabled (false)를 설정 한 다음 작업을 수행 한 다음 setUpdatesEnable (true)을 수행하면 영향이 없습니다. 나는 그것이 QTextEdit가 테이블을 처리하는 방식과 관련이 있다고 생각한다. 내 QT 버전 (4.7.4)인지 궁금합니다. – Anton

답변

6

당신이 textCursor.beginEditBlock()textCursor.endEditBlock()에 호출 사이에 코드를 삽입의 경우는 단일 작업으로 간주되는 것, 그리고 업데이트를위한 순간입니다 500 행 테스트.

+0

이것은 문제를 해결합니다. 고맙습니다. – Anton