实现qt中qtableview 已选择行区域右键点击弹出menu

1.先设置tableview 样式(ui.tv_searchList 为tableview控件)

//设置systemTableView的菜单格式 
//比较重要 只有这样设置 才能使用信号SIGNAL(customContextMenuRequested(QPoint))
ui.tv_searchList->setContextMenuPolicy(Qt::CustomContextMenu); 
//设置tableview一次只能可选一行
ui.tv_searchList>setSelectionBehavior(QAbstractItemView::SelectRows);
ui.tv_searchList>setSelectionMode(QAbstractItemView::SingleSelection);
2.实例menu (注意menu设为tableview的子控件)
action_fillUserInfo = new QAction ( this);
action_fillUserInfo ->setText ( QStringLiteral( "设置密码" ));
popMenu = new QMenu(ui.tv_searchList);
popMenu->addAction(action_fillUserInfo);
3.信号槽编写
新建信号连接
connect(ui.tv_searchList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));            //添加右键菜单

信号直接用

曹函数需要自己实现
void DeviceImportDialog::slotContextMenu(QPoint pos){
QModelIndex index = ui.tv_searchList->indexAt(pos);

if (index.isValid())
{
popMenu->exec(QCursor::pos()); // 菜单出现的位置为当前鼠标的位置
}
}
附:
action_fillUserInfo  为QAction
popMenu 为QMenu

效果:
能在tableview有可选择行的情况下弹出menu菜单
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是在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控件并运应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值