我使用qt开发显示从网络接收到的新日志项目的监视器。
我使用QTableWidget来显示动态项目收到和该表只显示100行。
问题是:监视器每秒会收到大约400条'消息'并更新这些行。
我发现使用setItem(行,列,项目)和新QTableWidgetItem()是非常耗时的,我只想显示从上最新的项目(在3个COLS三根弦)以BUTTOM。
但是这个方法非常耗时,当我一次添加4000个测试用例时,它的成本是5.281s,应该在4000/400 = 10秒内完成。
那么它花了一半时间,如何缩短时间?任何更好的方法来使用qt tablewidget?;)感谢您的阅读!如何优化qt tablewidget刷新?
的filterLog功能代码:
start = clock();
filter_log_display();
duration_filterLogDisplay += (double)(finish - start)/CLOCKS_PER_SEC;
filter_log_display():
clock_t start = clock();
row_selectable = false;
ui->tableWidget->setRowCount(0);//delete table items all
row_selectable = true;
int size_1 = logDisplayQueue.size() - 1;
ui->tableWidget->verticalScrollBar()->setSliderPosition(0);
if(size_1+1 < 100)
{
ui->tableWidget->setRowCount(size_1 + 1);
}
else
{
ui->tableWidget->setRowCount(100);
}
clock_t finish = clock();
duration_setRowCount += (double)(finish - start)/CLOCKS_PER_SEC;
for(int queue_i = size_1, index = 0; queue_i >= 0; queue_i--, index++)
{
start = clock();
LogInfoItem* logItem = (LogInfoItem*)logDisplayQueue.at(queue_i);
finish = clock();
duration_getItemFQueue += (double)(finish - start)/CLOCKS_PER_SEC;
start = clock();
QString BITS_str = bits2Hexs(logItem->BITS);
finish = clock();
duration_bits2Hexs += (double)(finish - start)/CLOCKS_PER_SEC;
start = clock();
ui->tableWidget->setItem(index, 0, new QTableWidgetItem(logItem->time));//time
ui->tableWidget->setItem(index, 1, new QTableWidgetItem(logItem->name));//name
ui->tableWidget->setItem(index, 2, new QTableWidgetItem(BITS_str));//BITS
finish = clock();
duration_setItem += (double)(finish - start)/CLOCKS_PER_SEC;
start = clock();
if(queue_i == oldRowItemNo)ui->tableWidget->selectRow(index);
finish = clock();
duration_ifSelectRow += (double)(finish - start)/CLOCKS_PER_SEC;
}
浅析时间::)有很多地方可以优化包括这一个:)
坦克你!!!方式是如此优雅,我试过另一种方式来避免调用函数,但在其他地方更新数据。毕竟谢谢你! – Al2O3