来源:微信公众号「编程学习基地」
qt右键菜单的两种方式
重写事件处理接口 contextMenuEvent
第一步
准备菜单
//定义菜单
QMenu *RightButtonMenu; //右键菜单
QAction *saveSreenShot; //保存到粘贴板
QAction *saveCopyAs; //另存为
QAction *quitSreenShot; //退出截图
初始化菜单
saveSreenShot = new QAction(tr("保存截图"), this);
//connect(saveSreenShot, SIGNAL(triggered()), this, SLOT(SaveSrceenShot()));
quitSreenShot = new QAction(tr("退出截图"), this);
//connect(quitSreenShot, SIGNAL(triggered()), this, SLOT(MenuClose()));
saveCopyAs = new QAction(tr("另存为"),this);
//connect(saveCopyAs, SIGNAL(triggered()), this, SLOT(SaveCopyAs()));
RightButtonMenu = new QMenu(this);
第二步
添加右键处理事件
virtual void contextMenuEvent(QContextMenuEvent *event); //右键菜单
第三步
菜单停靠指定位置等待选择
void Widget::contextMenuEvent(QContextMenuEvent *event)
{
Q_UNUSED(event)
RightButtonMenu->clear();
RightButtonMenu->addAction(saveSreenShot);
RightButtonMenu->addAction(saveCopyAs);
RightButtonMenu->addSeparator(); //分割线
RightButtonMenu->addAction(quitSreenShot);
RightButtonMenu->exec(QCursor::pos()); //在当前鼠标处堵住
}
绑定信号与槽
第一步
定义响应槽函数
private slots:
void _SlotPlayArgsMenu(const QPoint pos);
第二步
绑定信号与槽
this->setContextMenuPolicy(Qt::CustomContextMenu);//添加右键菜单策略
connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(_SlotPlayArgsMenu(QPoint)));
第三步
菜单停靠指定位置等待选择
void Widget::_SlotPlayArgsMenu(const QPoint pos)
{
qDebug()<<pos<<endl;
RightButtonMenu->clear();
RightButtonMenu->addAction(saveSreenShot);
RightButtonMenu->addAction(saveCopyAs);
RightButtonMenu->addSeparator(); //分割线
RightButtonMenu->addAction(quitSreenShot);
RightButtonMenu->exec(QCursor::pos()); //在当前鼠标处堵住
}