问题描述
想使用customContextMenuRequested信号触发槽函数,发现没有效果
例如:槽函数代码如下
void CMainWindow::on_tableView_customContextMenuRequested(const QPoint &pos)
{
Q_UNUSED(pos);
QMenu menu; //创建一个QMenu对象
//给menu添加三个选项
menu.addAction("选项一");
menu.addAction("选项二");
menu.addAction("选项三");
//将menu显示在鼠标当前位置
menu.exec(QCursor::pos());
}
原因分析:
原因一
局部变量的QMenu调用了show()方法显示,作用域结束直接释放
原因二
没有发出customContextMenuRequested信号
解决方案:
原因一解法
使用exec()方法显示右键菜单,不过记得设置exec中pos参数,否则菜单显示的位置可能不在你想要的位置
原因二解法一
触发菜单的控件没调用setContextMenuPolicy()函数设置contextMenuPolicy对应的值
以ui中的tableView举例,应如下调用
//只有将其设置成Qt::CustomContextMenu才会发出customContextMenuRequested信号
ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);
原因二解法二
若是不想使用setContextMenuPolicy函数或不想使用customContextMenuRequested信号触发也可重写contextMenuEvent事件,代码如下(若是不设置ContextMenuPolicy则会触发该事件)
void CMainWindow::contextMenuEvent(QContextMenuEvent *event)
{
Q_UNUSED(event);
QMenu menu;
menu.addAction("第一选项");
menu.addAction("第二选项");
menu.addAction("第三选项");
menu.exec(QCursor::pos());
}
友情提示——哪里看不懂可私哦,让我们一起互相进步吧
(创作不易,请留下一个免费的赞叭 谢谢 ^o^/)
注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
注:如有侵权,请联系作者删除