使用Qt在Gnome 3,Xfce和Unity下,带有子窗口的全屏窗口不会保持在顶部

时间:2014-06-24 20:32:09

标签: linux qt fullscreen pyside always-on-top

我有一个基于Qt的全屏应用程序。全屏应用程序应始终位于顶部,否则窗口的一部分将受阻。我希望无框全屏窗口有子窗口(特殊对话框,...)。这些子窗口应显示在全屏窗口的顶部。在下面显示它们没有多大意义。

一个简短的,自成一体的例子是:

from PySide import QtGui, QtCore

app = QtGui.QApplication([])

window = QtGui.QWidget(f=QtCore.Qt.WindowStaysOnTopHint)

child_window = QtGui.QWidget(window, f=QtCore.Qt.Window)
child_window.resize(400, 300)

layout = QtGui.QVBoxLayout(window)
exit = QtGui.QPushButton('Exit')
exit.clicked.connect(app.exit)
layout.addWidget(exit)
create = QtGui.QPushButton('Create child window')
create.clicked.connect(child_window.show)
layout.addWidget(create)
layout.addStretch()

window.showFullScreen()

app.exec_()

它是用Python编写的,并在Python 3.X + PySide 1.2.2(Qt 4.8)+ Ubuntu 14.04(Unity桌面)或Windows 7上进行测试。但是转换为C ++ Qt(或PyQt)应该很简单。

观察到,在Windows上,一切都如开头所述。 Qt.WindowsStaysOnTopHint不是必需的,而在Ubuntu上则是。

在Ubuntu上我看到最初全屏主窗口位于所有内容之上但是只要创建了一个子对话框窗口通常的桌面装饰(顶部和左侧栏)显示在全屏主窗口的上方阻碍视图的一部分!一旦子窗口关闭,全屏窗口就会再次显示在上面。

现在的问题是,如果有任何可以做的事情,可以在Ubuntu上使用全屏幕窗口加上子窗口和Qt吗?

Windows和Linux之间的不同行为也不令人满意,因为如果可能,应该避免使用特定于操作系统的代码。


随后:

使用the overview of available desktop environment on Ubuntu我安装了多个环境并对其进行了测试。

KDE,Lubuntu(Lxde?)和Openbox按预期工作(同样适用于Windows)。当全屏显示时,主窗口保持在顶部,并且上方显示子窗口。

然而,对于Gnome-Shell(Gnome 3),Xfce,Unity和Awesome,桌面装饰仍然在全屏模式的顶部,也会显示儿童窗口的窗口。 Xfce和Unity表现完全相同,Gnome和Awesome甚至还有一些小问题。

1 个答案:

答案 0 :(得分:0)

您是否尝试了documentation suggests

的事情
  

Qt :: WindowStaysOnTopHint 0x00040000通知窗口系统窗口应该保持在所有其他窗口之上。请注意   X11上的一些窗口管理器你也必须通过    Qt :: X11BypassWindowManagerHint ,以使此标记正常工作。

另外一个原因是你希望其他窗口成为一个孩子,如果你想在父母身边做什么?