qt QTableView删除选中行
时间: 2023-07-13 16:30:02 浏览: 611
您可以使用QTableView的selectionModel()方法来获取选中行的模型,然后使用model()方法获取QAbstractItemModel模型,进而对选中行进行删除操作。以下是一个示例代码:
```cpp
// 获取选中行的模型
QModelIndexList selected_indexes = ui->tableView->selectionModel()->selectedRows();
// 获取QAbstractItemModel模型
QAbstractItemModel *model = ui->tableView->model();
// 从后往前删除选中行
for (int i = selected_indexes.count() - 1; i >= 0; i--)
{
model->removeRow(selected_indexes.at(i).row());
}
```
在上述代码中,我们首先使用selectionModel()获取选中行的模型,然后使用model()方法获取QAbstractItemModel模型。然后我们从后往前遍历选中的行,并使用removeRow()方法删除每一行。
该代码可以实现删除单行和多行的功能。
相关问题
QTableView右键添加菜单栏,点击添加数据在QtableView末端插入一行数据,删除QtableView当前选中行,用C++回答
在使用QTableView时,可以通过以下步骤在右键菜单栏中添加操作来实现在末尾插入一行数据和删除当前选中行:
1. 创建右键菜单栏:
```cpp
QMenu *menu = new QMenu(tableView);
tableView->setContextMenuPolicy(Qt::CustomContextMenu);
tableView->addAction("添加数据", this, SLOT(addRow()));
tableView->addAction("删除数据", this, SLOT(deleteRow()));
```
2. 实现添加数据和删除数据的槽函数:
```cpp
void addRow()
{
int row = tableView->model()->rowCount();
tableView->model()->insertRow(row);
// 在此处可以设置新行的数据
}
void deleteRow()
{
QModelIndexList selectedRows = tableView->selectionModel()->selectedRows();
if (!selectedRows.isEmpty())
{
int row = selectedRows.first().row();
tableView->model()->removeRow(row);
}
}
```
3. 设置自定义上下文菜单信号的槽函数:
```cpp
connect(tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showContextMenu(QPoint)));
```
4. 显示右键菜单:
```cpp
void showContextMenu(const QPoint &pos)
{
QPoint globalPos = tableView->mapToGlobal(pos);
menu->exec(globalPos);
}
```
这样,当用户在QTableView上右键点击时,将会显示自定义的右键菜单栏,用户可以选择"添加数据"来在末尾插入一行数据,或选择"删除数据"来删除当前选中行。
qtableview删除选中的多行
要在Qt中删除QTableView中选中的多行,可以使用以下代码:
```python
# 获取选中的行
rows = set()
for index in self.tableView.selectedIndexes():
rows.add(index.row())
# 从模型中删除行
model = self.tableView.model()
for row in reversed(sorted(rows)):
model.removeRow(row)
```
该代码首先获取所有选中的行,然后从模型中删除这些行。请注意,我们使用`reversed`和`sorted`函数来确保从底部开始删除行,这是因为从顶部开始删除会导致索引错误。
阅读全文
相关推荐














