以widget为例(widget的子类都可以如widget一样设置右键菜单):
步骤一:
ui->widget->setContextMenuPolicy(Qt::CustomContextMenu);
根据文档的解释,在将widget 设置为 Qt::CustomContextMenu后,会触发customContextMenuResquested()函数,这个函数是一个signal
步骤二:
定义一个槽函数 void show_menu(const QPoint&);
将信号和槽函数连接起来
//connect(ui->widget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(show_menu(QPoint)));
connect(ui->widget,&QWidget::customContextMenuRequested,this,&RailwayPowerInterface::show_menu);
以上为两种连接方式,效果一样
步骤三:
在槽函数show_menu()实现菜单
void X::show_menu(const QPoint& pos)
{
QMenu *menu = new QMenu(ui->widget);\\创建菜单
QAction *one = new QAction("选项一",ui->widget);\\创建子项
QAction *two = new QAction("选项二",ui->widget);
menu->addAction(one);\\将子项添加道菜单zhong
menu->addAction(two);
menu->move (cursor().pos());\\设置菜单出现位置
menu->show ();
connect(one,&QAction::triggered,this,&RailwayPowerInterface::slot_one);\\子项点击槽函数
connect(two,&QAction::triggered,this,&RailwayPowerInterface::slot_two);
}
补充: 如果需要在选项一、选项二前面加图标,添加QIcon就可以了
one->setIcon(QIcon(":/img/demo.png"));
two->setIcon(QIcon(":/img/demo_2.png"));
效果如图: