点击QT的QMenu后出现qt.qpa.wayland: Non-toplevel surfaces can't request window states
时间: 2024-03-08 14:51:26 浏览: 166
Qt例程源代码QMenu.7z
5星 · 资源好评率100%
这个错误提示是在 Wayland 窗口管理器下出现的,它表示非顶层窗口不能请求窗口状态。这通常是由于在非顶层窗口上调用了 `setWindowState()` 或 `setWindowFlags()` 方法导致的。
在使用 `QMenu` 组件时,它是一个非顶层窗口,因此不能直接调用 `setWindowState()` 或 `setWindowFlags()` 方法。如果你需要在 `QMenu` 上设置窗口状态或者窗口标志位,可以使用 `QMenu.popup()` 方法弹出菜单窗口,并在菜单弹出前设置窗口状态或标志位。例如:
```python
menu = QMenu()
menu.addAction("Item 1")
menu.addAction("Item 2")
# 设置菜单窗口状态
menu.setWindowState(Qt.WindowActive | Qt.WindowMaximized)
# 弹出菜单
menu.popup(QCursor.pos())
```
这样,先设置菜单的窗口状态,然后在调用 `popup()` 方法弹出菜单。这样就可以避免在非顶层窗口上设置窗口状态或标志位导致的错误。
阅读全文