qt tableview删除行
时间: 2023-10-09 07:16:06 浏览: 541
在中,删除QTableView中的行可以通过以下步骤实现:
1. 配置QTableView的选择行为,使其可以选择多行。例如,使用setSelectionBehavior(QAbstractItemView::SelectRows)方法。
2. 配置QTableView的上下文菜单策略,以便可以右键点击并触发删除操作。例如,使用setContextMenuPolicy(Qt::CustomContextMenu)方法。
3. 创建一个QMenu对象,并添加需要的动作,例如"删除"和"多行删除"。
4. 将QMenu的动作连接到相应的槽函数,以执行删除操作。
5. 在槽函数中,根据需要,可以使用QMessageBox等进行确认操作,然后使用QAbstractItemModel的removeRow方法删除选定的行。
以下是一个示例代码:
```cpp
// 在构造函数中进行配置
// 设置选择行为
ui->tableView_Measure->setSelectionBehavior(QAbstractItemView::SelectRows);
// 设置上下文菜单策略
ui->tableView_Measure->setContextMenuPolicy(Qt::CustomContextMenu);
// 创建右键菜单和动作
RightClickMenu = new QMenu();
deleteAction = new QAction("删除", this);
deleteMultiAction = new QAction("多行删除", this);
RightClickMenu->addAction(deleteAction);
RightClickMenu->addAction(deleteMultiAction);
// 将右键菜单和槽函数连接起来
connect(ui->tableView_Measure, &QTableView::customContextMenuRequested, this, &MainFrame::onGetMousePos);
connect(RightClickMenu, &QMenu::triggered, this, &MainFrame::onMenuAction);
// 槽函数实现删除操作
void MainFrame::onMenuAction(QAction *act) {
if(act->text() == "删除") {
QMessageBox message(QMessageBox::NoIcon, "提示", "是否删除本行数据?", QMessageBox::Yes | QMessageBox::No, NULL);
if(message.exec() == QMessageBox::Yes) {
model_measure->removeRow(seletMouseRow);
}
}
else if(act->text() == "多行删除") {
QMessageBox message(QMessageBox::NoIcon, "提示", "是否删除所有选中行的数据?", QMessageBox::Yes | QMessageBox::No, NULL);
if(message.exec() == QMessageBox::Yes) {
QVector<int> row_list;
row_list.clear();
for(int i = model_measure->rowCount() - 1; i >= 0; i--) {
if(Qt::Checked == model_measure->item(i,0)->checkState()) {
row_list.push_back(i);
}
}
for(int j = 0; j < row_list.size(); j++) {
model_measure->removeRow(row_list.at(j));
}
}
}
}
```
阅读全文