qt 全屏播放视频的时候,右键弹出qmenu时候会闪一下
时间: 2023-11-26 16:02:38 浏览: 179
这种闪烁可能是由于鼠标右键点击时触发了QWidget::enterEvent和QWidget::leaveEvent事件,导致窗口的重绘。您可以尝试在菜单弹出之前禁用这些事件,以避免闪烁。您可以通过在QWidget子类中重新实现这些事件,并在菜单弹出时将其禁用来实现此操作。例如:
```cpp
class MyWidget : public QWidget {
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void enterEvent(QEvent *event) override {
if (!m_menuVisible) {
QWidget::enterEvent(event);
}
}
void leaveEvent(QEvent *event) override {
if (!m_menuVisible) {
QWidget::leaveEvent(event);
}
}
private:
bool m_menuVisible = false;
public slots:
void showMenu() {
m_menuVisible = true;
QMenu menu(this);
// add actions to menu...
menu.exec(mapToGlobal(QPoint(0, height())));
m_menuVisible = false;
}
};
```
在这个例子中,我们定义了一个布尔变量 m_menuVisible,用于跟踪菜单是否正在显示。在进入和离开事件中,我们检查该变量并决定是否调用 QWidget::enterEvent 或 QWidget::leaveEvent。在 showMenu 方法中,我们首先将 m_menuVisible 设置为 true,以便在进入和离开事件中停止 QWidget 重绘,然后显示菜单并在菜单关闭后将 m_menuVisible 设置回 false。
阅读全文