QtableView 刷新行数

来源:互联网 发布:网络摄像机球机 编辑:程序博客网 时间:2024/06/05 23:02

1 QTableView如何清空数据保留表头?

tableview->clear(); //连表头也会被删除

tableview->removeRow(); //就必须知道表中有多少行数据  如何获取表中数据行数?


    使用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); 

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 < 1000; ++i) {model->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

程序中需要显示的时候,

  1. tbList->setModel(NULL);  //清除原先数据集
  2. tbList->setModel(tb1);  //刷新显示