Qt实战案例(37)——利用Qt实现为控件添加右键菜单的功能

一、项目介绍

利用Qt实现为控件添加右键菜单的功能(以PushButton控件为例)。

二、项目基本配置

新建一个Qt案例,项目名称为“MenuTest”,基类选择“QWidget”,点击选中创建UI界面复选框,完成项目创建。

三、UI界面设计

UI界面布局如下:
在这里插入图片描述

界面中只创建了1个控件,其名称和类型如下:

序号名称类型属性
pushButtonQPushButtontext:按钮

四、主程序实现

4.1 widget.h头文件

头文件中声明两个槽函数:

private slots:
    void on_pushButton_clicked();
    void on_pushButton_customContextMenuRequested(const QPoint &pos);

4.2 widget.cpp源文件

定义按钮点击对应的槽函数:

//按钮点击槽函数
void Widget::on_pushButton_clicked()
{
    //相关功能
}

定义customContextMenuRequested对应的槽函数:

void Widget::on_pushButton_customContextMenuRequested(const QPoint &pos)
{
    QMenu *cmenu = new QMenu(ui->pushButton);//新建Menu
    //新建三个右键菜单,分别为Menu1,Menu2,Menu3
    QAction *action1 = cmenu->addAction("Menu 1");
    QAction *action2 = cmenu->addAction("Menu 2");
    QAction *action3 = cmenu->addAction("Menu 3");
    //连接这三个菜单项触发动作和对应的槽函数
    connect(action1, SIGNAL(triggered(bool)), this, SLOT(on_menu_click(bool)));
    connect(action2, SIGNAL(triggered(bool)), this, SLOT(on_menu_click(bool)));
    connect(action3, SIGNAL(triggered(bool)), this, SLOT(on_menu_click(bool)));
    cmenu->exec(QCursor::pos());//呼出菜单
}

当然这里仅仅是demo代码,每次点击右键的时候,我们都要重新new出菜单来,这样肯定会耗费资源,这些菜单创建的代码可以放在一个全局的函数中,只需要创建一次。

注意这个信号:
[signal] void QWidget::customContextMenuRequested(const QPoint &pos)

当小部件的contextMenuPolicy为Qt::CustomContextMenu,并且用户已请求小部件上的上下文菜单时,会发出此信号。位置pos是小部件接收的上下文菜单事件的位置。通常这是在小部件坐标中。
即在触发此信号前首先需要定义contextMenuPolicy:

    //添加右键菜单策略,以响应customContextMenuRequested()信号
    ui->pushButton->setContextMenuPolicy(Qt::CustomContextMenu);

五、效果演示

完整效果如下:
在这里插入图片描述

如果没有看懂的话,完整代码可以参考:
https://download.csdn.net/download/didi_ya/81277208


除了上面的方法之外,还可以通过重写contextMenuEvent()事件来实现右键菜单,这里就不细说了,可以自行百度。
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wendy_ya

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

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

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

打赏作者

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

抵扣说明:

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

余额充值