使用Qt中的QTableview与QStandardItem模块可以添加类似于excel中的表格,也可以删除想要删除的数据。
下面提供删除表格中选中的数据和按条件删除数据的方法,主要是通过获取数据所在的位置,从而获取所在行,使用removeRow(row)进行删除,具体实现代码如下:
tableView = new QTableView(dockwidget);
tableView->setObjectName(QString::fromUtf8("tableView"));
tableView->setGeometry(QRect(20, 90, 351, 651));
QStandardItemModel* model = new QStandardItemModel();
model->setItem(0, 0, new QStandardItem(" 123 "));
QStandardItem* itemJZ = new QStandardItem();
itemJZ->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//居中显示
QItemSelectionModel* pstSelectModel = new QItemSelectionModel(model); //选择模型
tableView->setModel(model);
tableView->horizontalHeader()->setVisible(false);//行头隐藏
tableView->verticalHeader()->setVisible(false);
tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应列宽行宽
tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置为不可编辑表格
tableView->setContextMenuPolicy(Qt::CustomContextMenu);
tableView->setSelectionModel(pstSelectModel);
tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
//删除在表格中所选中的行数据
QModelIndex curIndex = tableView->currentIndex();
if (curIndex.row() == model->rowCount() - 1) //最后一行
{
model->removeRow(curIndex.row()); //删除最后一行
}
else
{
model->removeRow(curIndex.row()); //删除一行,并重新设置当前选择行
pstSelectModel->setCurrentIndex(curIndex, QItemSelectionModel::Select);
}
}
删除满足指定条件的数据:
//删除表格中满足条件的行数据
QString curtext = comboBox->currentText();
int a;
int count = model->rowCount();
for (int i = 0; i < count; i++)
{
if (curtext == model->item(i, 1)->text())
{
a = model->item(i, 1)->index().row();
}
}
//删除表格中对应行数据
QModelIndex curIndex = tableView->currentIndex();
//model->removeRow(a);
if (a == model->rowCount() - 1) //最后一行
{
model->removeRow(a); //删除最后一行
}
else
{
model->removeRow(a); //删除一行,并重新设置当前选择行
pstSelectModel->setCurrentIndex(curIndex, QItemSelectionModel::Select);