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

目录

    • 一、项目介绍
    • 二、项目基本配置
    • 三、UI界面设计
    • 四、主程序实现
      • 4.1 widget.h头文件
      • 4.2 widget.cpp源文件
    • 五、效果演示

一、项目介绍

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

二、项目基本配置

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

三、UI界面设计

UI界面布局如下:
Qt实战案例(37)——利用Qt实现为控件添加右键菜单的功能_第1张图片

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

序号 名称 类型 属性
pushButton QPushButton text:按钮

四、主程序实现

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);

五、效果演示

完整效果如下:
Qt实战案例(37)——利用Qt实现为控件添加右键菜单的功能_第2张图片

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


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

你可能感兴趣的:(Qt,qt,ui,开发语言,c++)