QTableView右键添加菜单栏,点击添加数据在QtableView末端插入一行数据,删除QtableView当前选中行,用C++回答
时间: 2024-04-08 12:34:49 浏览: 126
您可以通过以下步骤在QTableView上添加右键菜单栏,并实现在末尾插入一行数据和删除当前选中行的功能:
1. 创建右键菜单栏:
在QTableView的构造函数或初始化函数中,创建一个QMenu对象作为右键菜单栏,并添加"添加数据"和"删除行"的QAction项。
```cpp
QTableView* tableView = new QTableView(this);
QMenu* menu = new QMenu(tableView);
QAction* addAction = new QAction("添加数据", this);
QAction* deleteAction = new QAction("删除行", this);
menu->addAction(addAction);
menu->addAction(deleteAction);
tableView->setContextMenuPolicy(Qt::CustomContextMenu);
tableView->setContextMenu(menu);
```
2. 连接右键菜单的信号槽:
使用customContextMenuRequested信号连接到一个槽函数,以便在用户右键点击时显示菜单栏。
```cpp
connect(tableView, &QTableView::customContextMenuRequested, this, [=](const QPoint& pos) {
menu->exec(tableView->viewport()->mapToGlobal(pos));
});
```
3. 实现插入一行数据的功能:
在槽函数中,通过调用QTableView的model()函数获取数据模型,并使用insertRow()方法在末尾插入一行空数据。
```cpp
connect(addAction, &QAction::triggered, this, [=]() {
QAbstractItemModel* model = tableView->model();
model->insertRow(model->rowCount());
});
```
4. 实现删除当前选中行的功能:
在槽函数中,通过调用QTableView的selectionModel()函数获取选择模型,并使用selectedRows()方法获取当前选中的行号,然后使用removeRow()方法删除这些行。
```cpp
connect(deleteAction, &QAction::triggered, this, [=]() {
QItemSelectionModel* selectionModel = tableView->selectionModel();
QModelIndexList selectedRows = selectionModel->selectedRows();
if (!selectedRows.isEmpty()) {
QAbstractItemModel* model = tableView->model();
for (const QModelIndex& index : selectedRows) {
model->removeRow(index.row());
}
}
});
```
这样,您就可以在QTableView上右键点击,选择添加数据来在末尾插入一行数据,或者选择删除行来删除当前选中的行。
阅读全文