夜凉如水

Qt中右键单击后弹出菜单功能

夜凉如水 编程Qt

2017-07-07 周五 晴 北京 院里

Qt中右键单击后弹出菜单功能

Windows系统中右键单击弹出菜单很常见,下面利用customContextMenuRequested(QPoint)信号和QMenu类来实现这一功能。

1.添加弹出菜单槽函数

利用QMenu类可以很容易实现菜单功能,这里通过addAction()函数添加一个保存数据的选项“Save data to file”,并将其连接到saveDataToFile()槽函数;popup()函数可以将其显示到参数pos对应的位置上。

void QCustomPlotPlus::contextMenuRequest(QPoint pos)
{
    QMenu *menu = new QMenu(this);
    menu->setAttribute(Qt::WA_DeleteOnClose);
    //添加保存数据菜单选项,连接到saveDataToFile()槽函数
    menu->addAction("Save data to file", this, SLOT(saveDataToFile()));
    menu->popup(mapToGlobal(pos));
}

2.连接customContextMenuRequested(QPoint)信号

首先利用setContextMenuPolicy()函数菜单规则设为Qt::CustomContextMenu,这样在鼠标右键单击时便会发出customContextMenuRequested(QPoint)信号。然后,连接customContextMenuRequested(QPoint)信号和上面添加的槽函数contextMenuRequest(QPoint)即可。

setContextMenuPolicy(Qt::CustomContextMenu);
connect(this,
      SIGNAL(customContextMenuRequested(QPoint)),
      SLOT(contextMenuRequest(QPoint)));

得到结果如下图所示: 右键单击弹出菜单

夜凉如水
人丑就要多读书