QTableView 刷新相关 | 您所在的位置:网站首页 › iOS异步线程数据刷新tableview导致越界 › QTableView 刷新相关 |
1 QTableView如何清空数据保留表头?
tableview->clear(); //连表头也会被删除
tableview->removeRow(); //就必须知道表中有多少行数据 如何获取表中数据行数?
2 使用QStandardItemModel的QTableView,添加大量数据解决刷新卡顿问题 添加数据前: TableView->setUpdatesEnabled(false); //暂停界面刷新 添加大量数据过程。。。。添加完毕后: TableView->setUpdatesEnabled(true); //恢复界面刷新即可,或者继承QAbstractItemModel来覆写inserrows函数。 m_itemmodel = new QStandardItemModel(this); ui.tableView->setModel(m_itemmodel);你要清空这样写就可以:m_itemmodel->removeRow(0, m_itemmodel->rowCount()); 用QTableView+QStandardItemModel来代替QTableWidget. 用这个 model->removeRows(0, model->rowCount()); ui->tableView->reset();ui->tableView->setModel(m_Model); //这样就ok了 添加数据的时候要调用beginInsertRows()/endInsertRows(),删减数据的时候要调用beginRemoveRows()/endRemoveRows(),或者干脆调用reset(),不过reset()的副作用是连用户的焦点、选择都丢掉,最好别用。 goodsModel->appendRow(items); [cpp] view plain copy int main(int argc, char *argv[]) { QApplication app(argc, argv); QStandardItemModel *model = new QStandardItemModel(); QTableView *table = new QTableView(); // 如果事先给 table设置了 model而不预指定好要存储的数据的行数,则会非常慢 // table->setModel(model); /// [[1]] // model->setRowCount(1000); /// [[1]] model->setColumnCount(14); for (int i = 0; i setItem(i, 0, new QStandardItem("1")); model->setItem(i, 1, new QStandardItem("2")); model->setItem(i, 2, new QStandardItem("3")); model->setItem(i, 3, new QStandardItem("4")); model->setItem(i, 4, new QStandardItem("5")); model->setItem(i, 5, new QStandardItem("6")); model->setItem(i, 6, new QStandardItem("7")); model->setItem(i, 7, new QStandardItem("8")); model->setItem(i, 8, new QStandardItem("9")); model->setItem(i, 9, new QStandardItem("10")); model->setItem(i, 10, new QStandardItem("11")); model->setItem(i, 11, new QStandardItem("12")); model->setItem(i, 12, new QStandardItem("13")); model->setItem(i, 13, new QStandardItem("14")); } // 如果你是先把数据加载到model中的,那么事先不指定要存储的行数。 // 先把数据存储到model中 ,然后再给table设置model,这样也会很快 . table->setModel(model); /// [[2]] table->show(); return app.exec(); }界面上的QTableView取名为tbList,与tbList关联的Model取名为tb1 程序中需要显示的时候, tbList->setModel(NULL); //清除原先数据集tbList->setModel(tb1); //刷新显示 |
CopyRight 2018-2019 实验室设备网 版权所有 |