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);
}
}
答
看来,如果你把调用之间你的代码textCursor.beginEditBlock()
和textCursor.endEditBlock()
,它被认为是一个单一的操作,和更新是瞬时的你的500行测试。
+0
这解决了这个问题。谢谢。 – Anton 2012-04-02 15:38:55
在开始操作之前,您可以尝试隐藏(setHidden(true))textedit对象,并在结束时调用setShown(true)。 Qt小部件只在可见时重绘,否则update()信号将被忽略。也许这是因为绘制... – ypnos 2012-03-30 23:06:21
使用'setUpdatesEnabled()'通常是一种更好的方式来完成ypnos描述的技巧。 – Chris 2012-03-30 23:14:01
刚刚测试过。 setHidden(true),setShown(true)没有任何影响。设置setUpdatesEnabled(false),然后执行操作,然后执行setUpdatesEnable(true),也没有任何影响。我想这与QTextEdit处理表格的方式有关。我不知道这是我的QT版本(它是4.7.4)。 – Anton 2012-03-30 23:24:31