创建一个即使在全屏模式下也保持在顶部的新窗口(Linux 上的 Qt)

Posted

技术标签:

【中文标题】创建一个即使在全屏模式下也保持在顶部的新窗口(Linux 上的 Qt)【英文标题】:Creating a new window that stays on top even when in full screen mode (Qt on Linux) 【发布时间】:2011-02-19 03:08:48 【问题描述】:

我在嵌入式目标上使用 Qt 4.6.3 和 ubuntu linux。我打电话

dlg->setWindowState(Qt::WindowFullScreen);

在我的应用程序中的窗口上(所以我不会将触摸屏上的任何不动产释放到屏幕顶部和底部的任务栏和状态面板。这一切都可以正常工作并且符合预期。问题来了在我想弹出屏幕键盘以允许用户输入一些数据时。我使用

m_keyProc= new QProcess();
m_keyProc->start("onboard -s 640x120");

这会弹出键盘,但它位于全屏窗口的后面。 onbaord 键盘首选项设置为始终位于顶部,但这似乎实际上意味着“除了全屏窗口”。我想这是有道理的,并且可能满足大多数用例,但我需要它真正处于领先地位。

我可以 A) 不是全屏模式(因此键盘可以工作)并以编程方式隐藏任务栏吗?或 B)尽管我处于全屏状态,但仍强制键盘位于顶部?

注意:在windows上我们调用

m_keyProc->start("C:\\Windows\\system32\\osk.exe");

尽管处于全屏状态,但 osk 键盘仍位于顶部。所以,我猜这是不同操作系统上窗口管理器的差异。那么我需要用linux窗口管理器在窗口上设置一些标志吗?

【问题讨论】:

【参考方案1】:

Qt 似乎没有办法将其他非 Qt 进程放在前面。您可能需要通过调用 QProcess::pid() 从 QProcess 获取本机平台进程 ID,然后调用底层 OS API 来完成。

【讨论】:

正如我所担心的那样。但是我对此有点困惑。我假设我想使用XRaiseWindow(Display *display, Window w) 但我如何确定窗口 ID 以提供 XRaiseWindow。在 Windows 上,我会使用 EnumWindowsGetWindowText 来找到它。我没有成功找到 xlib 的等价物。 我对 X Window 一无所知(这就是我使用 Qt 的原因 :))但我怀疑 XRaiseWindow 仅适用于同一进程中的窗口,而不适用于其他进程中的窗口。为此,我在 Mac 上使用 SetFrontProcess

以上是关于创建一个即使在全屏模式下也保持在顶部的新窗口(Linux 上的 Qt)的主要内容,如果未能解决你的问题,请参考以下文章

强制 Tkinter 窗口停留在全屏顶部 - Windows 10

在 GTK+ 中让窗口显示在全屏窗口上方

Pygame 窗口在全屏模式下没有响应

Electron 应用程序 - 如何在全屏模式下禁用/隐藏任务栏中的窗口

保持元素在全屏 UWP 应用程序中显示

在全屏模式下隐藏标题?