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

C++ 创建一个即使在全屏模式下也保持在顶部的新窗口(Linux上的Qt),c++,linux,qt,C++,Linux,Qt,我在嵌入式目标上使用Qt4.6.3和UbuntuLinux。我打电话 dlg->setWindowState(Qt::WindowFullScreen); 在我的应用程序中的windows上(因此我不会在触摸屏上丢失任何不动产到任务栏和屏幕顶部和底部的状态面板上。这一切都正常工作,正如预期的那样。当我想弹出屏幕键盘以允许用户输入一些数据时,会出现问题。我使用 m_keyProc= new QProcess(); m_keyProc->start("onboard -s 640x12

我在嵌入式目标上使用Qt4.6.3和UbuntuLinux。我打电话

dlg->setWindowState(Qt::WindowFullScreen);
在我的应用程序中的windows上(因此我不会在触摸屏上丢失任何不动产到任务栏和屏幕顶部和底部的状态面板上。这一切都正常工作,正如预期的那样。当我想弹出屏幕键盘以允许用户输入一些数据时,会出现问题。我使用

m_keyProc= new QProcess();
m_keyProc->start("onboard -s 640x120");
这会弹出键盘,但它位于全屏窗口的后面。onbaord键盘的首选项设置为始终位于顶部,但这似乎实际上意味着“除了全屏窗口”。我想这是有道理的,可能符合大多数用例,但我需要它真正位于顶部

我能不能A)不是全屏模式(这样键盘可以工作),而是通过编程隐藏任务栏?或者B)无论我的全屏状态如何,强制键盘处于顶部

注意:在windows上,我们称之为

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

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

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

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

正如我所担心的那样。但是我有点困惑。我假设我想使用
XRaiseWindow(Display*Display,Window w)
,但是我如何确定要给XRaiseWindow的窗口ID呢。在windows上,我会使用
EnumWindows
GetWindowText
来查找它。我没有成功地找到xlib的等效项。我对X Window一无所知(这就是为什么我使用Qt:),但我怀疑
XRaiseWindow
仅适用于同一进程中的窗口,而不适用于其他进程中的窗口。我在Mac上使用了
SetFrontProcess
,正如我担心的那样。但是我有点困惑。我假设我想使用
XRaiseWindow(Display*Display,Window w)
,但是我如何确定要给XRaiseWindow的窗口ID呢。在windows上,我会使用
EnumWindows
GetWindowText
来查找它。我没有成功地找到xlib的等效项。我对X Window一无所知(这就是为什么我使用Qt:),但我怀疑
XRaiseWindow
仅适用于同一进程中的窗口,而不适用于其他进程中的窗口。为此,我在Mac上使用
SetFrontProcess