QTextEdit插入和删除行非常慢。无论如何,让它更快?

QTextEdit插入和删除行非常慢。无论如何,让它更快?

问题描述:

我有一个QTextEdit对象中有50行的表。 删除50行1乘1,然后添加50行1乘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

在开始操作之前,您可以尝试隐藏(setHidden(true))textedit对象,并在结束时调用setShown(true)。 Qt小部件只在可见时重绘,否则update()信号将被忽略。也许这是因为绘制... – ypnos 2012-03-30 23:06:21

+2

使用'setUpdatesEnabled()'通常是一种更好的方式来完成ypnos描述的技巧。 – Chris 2012-03-30 23:14:01

+0

刚刚测试过。 setHidden(true),setShown(true)没有任何影响。设置setUpdatesEnabled(false),然后执行操作,然后执行setUpdatesEnable(true),也没有任何影响。我想这与QTextEdit处理表格的方式有关。我不知道这是我的QT版本(它是4.7.4)。 – Anton 2012-03-30 23:24:31

看来,如果你把调用之间你的代码textCursor.beginEditBlock()textCursor.endEditBlock(),它被认为是一个单一的操作,和更新是瞬时的你的500行测试。

+0

这解决了这个问题。谢谢。 – Anton 2012-04-02 15:38:55