我正在编写一个在 X 上运行的 C++ Qt5 应用程序。它将在其下运行的窗口管理器是Metacity。我有一些要求我不知道如何解决:
- 窗户不能关闭
- 窗口一定不能最小化
- 窗口必须始终在顶部
我使用以下方法实现了要求 3:
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
但是,右键单击窗口标题仍然会显示一个弹出菜单:
从此菜单中,用户可以关闭“始终位于顶部”设置,并且“最小化”和“关闭”选项仍然可用。我试过了:
setWindowFlags(windowFlags() & ~(Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint));
但是,这个功能似乎不能用这个窗口管理器做我想要的,因为没有功能被禁用。
一个后备位置是:
- 如果应用程序曾经关闭,则重新启动应用程序(由于其他原因已经存在)
- 如果窗口被最小化,将其恢复到正常大小
另一个后备位置是:
- 使用
Qt::X11BypassWindowManagerHint
它完全避免了窗口管理器,并以某种方式实现窗口移动和调整大小。
理想情况下,我想继续使用窗口管理器来提供窗口移动和大小功能,但关闭我不需要的功能。
(请尽量避免诸如“你不应该那样做”或“这是一个愚蠢的想法”之类的评论 - 是的,我知道,但这个应用程序不适合一般用途,它只用于专门的环境,它是主题到不是我写的要求。)