Qt cpp设置setAttribute(Qt::WA_TranslucentBackground, true) ,contextMenuEvent无效
时间: 2023-07-10 20:11:30 浏览: 342
WPF中鼠标左键单击Button弹出ContextMenu,让其右键ContextMenu失效
如果在QWidget上设置了setAttribute(Qt::WA_TranslucentBackground, true),则QWidget将具有半透明背景。在这种情况下,你可能需要重新实现paintEvent()来绘制自定义背景。这可能会导致contextMenuEvent无法正常工作。
解决此问题的方法是重新实现QWdiget的mousePressEvent()和mouseReleaseEvent()事件,手动模拟contextMenuEvent事件。具体来说,你可以在mouseReleaseEvent()中检查是否单击了右键,如果是,则手动触发contextMenuEvent事件。以下是示例代码:
```cpp
void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::RightButton)
{
QContextMenuEvent contextEvent(QContextMenuEvent::Mouse, event->pos(), event->globalPos());
contextMenuEvent(&contextEvent);
}
}
```
这将模拟右键单击事件并触发contextMenuEvent事件。请注意,这是一种不太优雅的解决方案,但在某些情况下可能是唯一可行的方法。
阅读全文