Qt中在QTableView控件中设置右键菜单,请给我完整代码
时间: 2024-02-09 18:12:32 浏览: 85
QT右键菜单
以下是在QTableView控件中设置右键菜单的完整代码:
```cpp
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QMenu>
#include <QAction>
#include <QPoint>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建一个QTableView控件和一个QStandardItemModel模型
QTableView tableView;
QStandardItemModel model;
// 设置模型的行数和列数
model.setRowCount(3);
model.setColumnCount(2);
// 设置表头
model.setHorizontalHeaderLabels({"姓名", "年龄"});
// 设置数据
model.setItem(0, 0, new QStandardItem("张三"));
model.setItem(0, 1, new QStandardItem("18"));
model.setItem(1, 0, new QStandardItem("李四"));
model.setItem(1, 1, new QStandardItem("20"));
model.setItem(2, 0, new QStandardItem("王五"));
model.setItem(2, 1, new QStandardItem("22"));
// 将模型设置给QTableView控件
tableView.setModel(&model);
// 创建一个右键菜单
QMenu menu(&tableView);
QAction *addAction = new QAction("添加", &menu);
QAction *deleteAction = new QAction("删除", &menu);
// 添加菜单项
menu.addAction(addAction);
menu.addAction(deleteAction);
// 连接菜单项的槽函数
QObject::connect(addAction, &QAction::triggered, [&]() {
// 在模型中添加一行数据
int rowCount = model.rowCount();
model.insertRow(rowCount);
// 设置新添加的一行的数据
model.setItem(rowCount, 0, new QStandardItem("新用户"));
model.setItem(rowCount, 1, new QStandardItem("0"));
});
QObject::connect(deleteAction, &QAction::triggered, [&]() {
// 获取选中的行
QModelIndexList selectedRows = tableView.selectionModel()->selectedIndexes();
// 删除选中的行
for (const QModelIndex &index : selectedRows) {
model.removeRow(index.row());
}
});
// 在QTableView控件中设置右键菜单
tableView.setContextMenuPolicy(Qt::CustomContextMenu);
QObject::connect(&tableView, &QTableView::customContextMenuRequested, [&](const QPoint &pos) {
menu.exec(tableView.mapToGlobal(pos));
});
tableView.show();
return a.exec();
}
```
在这个例子中,我们使用了QTableView控件和QStandardItemModel模型来展示数据。我们通过设置模型的行数和列数,以及设置表头和数据来填充模型。然后,我们将模型设置给QTableView控件,以便在GUI中显示数据。
我们创建了一个QMenu对象来作为右键菜单,并添加了两个菜单项(添加和删除)。我们连接了菜单项的槽函数来实现对模型的添加和删除操作。
我们在QTableView控件中设置了右键菜单,并连接了customContextMenuRequested信号来在右键单击时显示菜单。我们使用mapToGlobal函数将鼠标单击位置的坐标转换为全局坐标,以便在正确的位置显示菜单。
最后,我们显示QTableView控件并运行应用程序。
阅读全文