qt showFullScreen()全屏显示模式下,右键弹出menu会闪屏
时间: 2024-01-22 15:20:13 浏览: 164
这个问题可能是由于显示模式的变化导致的。在全屏模式下,窗口会覆盖整个屏幕,而右键弹出的菜单可能会在窗口之外显示,导致窗口需要重新绘制。
你可以尝试在弹出菜单时暂时将窗口恢复到窗口模式,菜单关闭后再恢复到全屏模式。具体实现方式如下:
1. 重载事件过滤器函数,捕获鼠标右键按下事件;
2. 在事件过滤器函数中,将窗口从全屏模式切换到窗口模式;
3. 弹出菜单;
4. 菜单关闭后,将窗口恢复到全屏模式。
具体实现代码如下:
```cpp
bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::MouseButtonPress) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::RightButton) {
// 切换到窗口模式
setWindowState(windowState() & ~Qt::WindowFullScreen);
// 弹出菜单
QMenu menu(this);
menu.addAction(tr("Menu Item 1"));
menu.addAction(tr("Menu Item 2"));
menu.exec(mouseEvent->globalPos());
// 恢复全屏模式
setWindowState(windowState() | Qt::WindowFullScreen);
return true;
}
}
return QObject::eventFilter(obj, event);
}
```
然后,在构造函数中安装事件过滤器:
```cpp
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
// ...
installEventFilter(this);
}
```
阅读全文