2012-03-30 1 views
1

У меня есть таблица с 50 строками в объекте QTextEdit. Удаление 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

+2

Использование 'setUpdatesEnabled()', как правило, лучший способ сделать трюк, описанный ypnos. – Chris

+0

Просто протестировал его. setHidden (true), setShown (true) Не оказывает никакого влияния. Установите setUpdatesEnabled (false), затем выполните операции, затем выполните setUpdatesEnable (true), также не имеет никакого влияния. Я предполагаю, что это имеет какое-то отношение к тому, как QTextEdit обрабатывает таблицы. Интересно, это моя версия QT (которая равна 4.7.4). – Anton

ответ

6

Кажется, что если вы поставите свой код между вызовами textCursor.beginEditBlock() и textCursor.endEditBlock(), это считается как одна операция, и обновление происходит мгновенно для ваш тест на 500 строк.

+0

Это решает проблему. Спасибо. – Anton