|
10Qter豆
本帖最后由 dearcc 于 2017-8-24 20:41 编辑
- void Dialog::on_btn1_clicked()
- {
- QTime time;
- time.start();
- int count = 500;
- ui->tableView->setUpdatesEnabled(false);
- m_pModel->setRowCount(count);
- for(int i = 0 ; i < count; ++i)
- {
- for(int j = 0; j < 10; ++j)
- {
- QStandardItem *item = m_pModel->item(i,j);
- if(NULL == item)
- {
- item = new QStandardItem("btn1");
- m_pModel->setItem(i,j,item);
- }
- else
- {
- if(item->text() != "btn_1")
- item->setText("btn_1");
- }
- }
- }
- ui->tableView->setUpdatesEnabled(true);
- qDebug() << "btn1 " << time.elapsed();
- }
- void Dialog::on_btn2_clicked()
- {
- QTime time;
- time.start();
- int count = 1000;
- ui->tableView->setUpdatesEnabled(false);
- m_pModel->setRowCount(count);
- for(int i = 0 ; i < count; ++i)
- {
- for(int j = 0; j < 10; ++j)
- {
- QStandardItem *item = m_pModel->item(i,j);
- if(NULL == item)
- {
- item = new QStandardItem("btn2");
- m_pModel->setItem(i,j,item);
- }
- else
- {
- if(item->text() != "btn_2")
- item->setText("btn_2");
- }
- }
- }
- ui->tableView->setUpdatesEnabled(true);
- qDebug() << "btn2 " << time.elapsed();
- }
- void Dialog::on_btn3_clicked()
- {
- QTime time;
- time.start();
- int count = 2000;
- ui->tableView->setUpdatesEnabled(false);
- m_pModel->setRowCount(count);
- for(int i = 0 ; i < count; ++i)
- {
- for(int j = 0; j < 10; ++j)
- {
- QStandardItem *item = m_pModel->item(i,j);
- if(NULL == item)
- {
- item = new QStandardItem("btn3");
- m_pModel->setItem(i,j,item);
- }
- else
- {
- if(item->text() != "btn_3")
- item->setText("btn_3");
- }
- }
- }
- ui->tableView->setUpdatesEnabled(true);
- qDebug() << "btn3 " << time.elapsed();
- }
复制代码
描述:
1、一个tableview,对应了一个standarm item model,将model和view关联,只对model进行数据操作;
2、分三次操作(三个按钮,按钮1加载500行,按钮2加载1000行,按钮3加载1000行):
1)model加载500行10列数据,耗时40ms左右;只执行此操作(反复点击按钮加载),多次后为7ms完成;
2)model不清除原有500行数据,新增500行,共显示1000行,时间1200ms左右,多次加载为10ms左右;
3)model切换1000行数据(更新1000),耗时600ms左右,多次点击耗时2400ms左右;
4)以上三次操作反复切换,耗时会越来越多,不明白为什么?(不调用model的clear函数,都是处理行的增加和减少,clear后耗时更多)。
3、现象时,反复点击一个按钮加载数据,耗时不多;但换一个按钮加载数据,哪怕行数一样,耗时也会增加很多,导致界面刷新卡顿。
4、对table view进行setUpdateEnable操作,在刷新前false,刷新后true,可以一定程度提升效率,但不明显。
望大神给出指导意见,万分感谢!
目前只知道行数不足,需要增加行时,new standard item的时候耗时;还有在行多时,remove行耗时;并且耗时都非常严重。
关键,在行数相同时,只是更新一下数据(按钮1、2切换),耗时也会非常严重,2秒多呢!
|
|