自定义右键菜单

最后更新于:2022-04-02 02:11:27

[TOC] ## 概述 右键菜单功能很常见,我们添加槽函数的操作就是通过右键菜单实现的。在 Qt 库中,每一条菜单项称为 QAction,多条菜单项组成一个菜单,菜单类是 QMenu。菜单项 QAction 不仅可以用于菜单,工具栏的按钮也是 QAction 实现的。QAction 常用构造函数如下: ``` QAction(const QString & text, QObject * parent) QAction(const QIcon & icon, const QString & text, QObject * parent) // 信号 void QAction::triggered(bool checked = false) //点击菜单项触发信号 // checked 一般在菜单可勾选才用到 void QAction::setCheckable(bool) // 设置勾选菜单 // 单独的菜单项是不能弹出显示的,需要将菜单项添加到菜单或工具栏才能使用 QMenu(QWidget * parent = 0) QMenu(const QString & title, QWidget * parent = 0) ``` ## 实例 ``` //创建右键菜单对象 m_menuContext = new QMenu(tr("ContextMenu")); //右键菜单其实不显示ContextMenu文本 //创建“添加条目”菜单项并添加到菜单 QAction *actAdd = new QAction(tr("添加条目"), this); m_menuContext->addAction( actAdd ); //创建“编辑条目”菜单项并添加到菜单 QAction *actEdit = new QAction(tr("编辑条目"), this); m_menuContext->addAction( actEdit ); //创建“删除条目”菜单项并添加到菜单 QAction *actDel = new QAction(tr("删除条目"), this); m_menuContext->addAction( actDel ); //创建“清空所有”菜单项并添加到菜单 QAction *actClearAll = new QAction(tr("清空所有"), this); m_menuContext->addAction( actClearAll ); //设置列表控件可以有自定义右键菜单 ui->listWidget->setContextMenuPolicy( Qt::CustomContextMenu ); //关联弹出菜单信号 connect(ui->listWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomContextMenuRequested(QPoint)) ); //为四个菜单项关联点击信号到槽函数 connect(actAdd, SIGNAL(triggered()), this, SLOT(onAddItemTriggered())); connect(actEdit, SIGNAL(triggered()), this, SLOT(onEditItemTriggered())); connect(actDel, SIGNAL(triggered()), this, SLOT(onDelItemTriggered())); connect(actClearAll, SIGNAL(triggered()), this, SLOT(onClearAllTriggered())); //弹出右键菜单的槽函数 void Widget::onCustomContextMenuRequested(const QPoint & pos) { //控件内的相对坐标转为屏幕坐标 //是列表控件发出的信号,就用列表控件的转换函数 QPoint screenPos = ui->listWidget->mapToGlobal( pos ); //弹出菜单 QAction *actRet = m_menuContext->exec( screenPos ); if(NULL != actRet)//检查非空才能使用该指针 { qDebug()<text(); } } ```
';