- 一、项目介绍
- 二、项目基本配置
- 三、UI界面设计
- 四、主程序实现
- 4.1 widget.h头文件
- 4.2 widget.cpp源文件
- 五、效果演示
利用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,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~