Qt之给控件添加右键菜单

本文介绍了如何在Qt应用中设置控件的contextMenuPolicy,添加自定义槽函数以响应右键点击,并创建一个包含适应窗口宽度选项的菜单。还涉及了头文件中的函数定义和文件打开状态的条件判断。
摘要由CSDN通过智能技术生成

一、设置控件

在对应控件的属性中,将contextMenuPolicy设置为CustomContextMenu

二、添加槽函数

在对应控件上右键选择槽函数customContextMenuRequested(QPoint)

三、在槽函数中添加右键菜单

在槽函数中输入如下代码,添加右键菜单。

//右键菜单
void MainWindow::on_stackedWidget_customContextMenuRequested(const QPoint &pos)
{
    QMenu * menu = new QMenu(this);
    QAction *action = new QAction;
    action->setText(("适应窗口宽度"));
    connect(action, SIGNAL(triggered(bool)), this, SLOT(PageZoomToWidth()));
    menu->addAction(action);
    menu->exec(QCursor::pos());
}

通过connect函数链接右键的处理函数,如下图所示。

//恢复到合适大小
void MainWindow::PageZoomToWidth()
{
    //*******************文件打开状态才响应*******************
    if (!pdf->hasOpenDocument()) {
        return;
    }

    pdf->zoomCentered(XpdfWidget::zoomToWidth);
}

四、头文件的处理

右键的处理函数需要作为slots,在头文件中定义

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是在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控件并运行应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kissgoodbye2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值