点击右键弹出下拉框

本文介绍了如何在QT环境下为GUI应用添加鼠标右键弹出菜单功能。通过创建QMenu对象,添加QAction并设置相应槽函数,实现在鼠标右键点击时显示自定义菜单,并根据用户选择触发不同操作。详细步骤包括添加customContextMenuRequested事件、修改contextMenuPolicy、连接信号和槽,以及处理菜单项触发的事件。
摘要由CSDN通过智能技术生成

在用QT编程时,有时候要实现鼠标右键弹出菜单的功能.下面代码演示鼠标右键弹出菜单.

1.新建一个QT工程,点击MainWindow.ui,鼠标右键Go to slot…,添加customContextMenuRequested(const QPoint &pos)事件

2.找到属性页中的contextMenuPolicy,把DefaultContextMenu改成CustomContextMenu.保存关闭MainWindow.ui

3.在on_MainWindow_customContextMenuRequested(const QPoint &pos)函数体添加一下代码

void MainWindow::on_MainWindow_customContextMenuRequested(const QPoint &/pos/)
{
//创建菜单对象
QMenu *pMenu = new QMenu(this);

QAction *pNewTask = new QAction(tr("新建任务"), this);
QAction *pEditTask = new QAction(tr("设置任务"), this);
QAction *pDeleteTask = new QAction(tr("删除任务"), this);

QAction *pToolRenName = new QAction(tr("改名工具"), this);
QAction *pToolEdot = new QAction(tr("设置工具"), this);
QAction *pToolDelete = new QAction(tr("删除工具"), this);

//1:新建任务 2:设置任务 3:删除任务 4:改名工具 5:设置工具 6:删除工具
pNewTask->setData(1);
pEditTask->setData(2);
pDeleteTask ->setData(3);
pToolRenName->setData(4);
pToolEdot->setData(5);
pToolDelete ->setData(6);

//把QAction对象添加到菜单上
pMenu->addAction(pNewTask);
pMenu->addAction(pEditTask);
pMenu->addAction(pDeleteTask);
pMenu->addAction(pToolRenName);
pMenu->addAction(pToolEdot);
pMenu->addAction(pToolDelete);

//连接鼠标右键点击信号
connect(pNewTask, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pEditTask, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pDeleteTask, SIGNAL(triggered()), SLOT(onTaskBoxContextMenuEvent()));
connect(pToolRenName, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pToolEdot, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pToolDelete, SIGNAL(triggered()), SLOT(onTaskBoxContextMenuEvent()));

//在鼠标右键点击的地方显示菜单
pMenu->exec(cursor().pos());

//释放内存
QList<QAction*> list = pMenu->actions();
foreach (QAction* pAction, list) delete pAction;
delete pMenu;

}

void MainWindow::onTaskBoxContextMenuEvent()
{
QAction *pEven = qobject_cast<QAction *>(this->sender()); //this->sender()就是发信号者 QAction

//获取发送信息类型 1:新建任务 2:设置任务 3:删除任务 4:改名工具 5:设置工具 6:删除工具
int iType = pEven->data().toInt();

switch (iType)
{
case 1:
    QMessageBox::about(this, "tip", pEven->text());
    break;
case 2:
    QMessageBox::about(this, "tip", pEven->text());
    break;
case 3:
    QMessageBox::about(this, "tip", pEven->text());
    break;
case 4:
    QMessageBox::about(this, "tip", pEven->text());
    break;
case 5:
    QMessageBox::about(this, "tip", pEven->text());
    break;
case 6:
    QMessageBox::about(this, "tip", pEven->text());
    break;
default:
    break;
}

}

4.运行结果如下所示:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值