2012-03-30 3 views
1

QTextEditオブジェクトに50行のテーブルがあります。 50行を1ずつ削除し、1行ずつ50行追加するには約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

関連する問題