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

Tri*_*ion 6 linux qt fullscreen always-on-top pyside

我有一个基于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_()
Run Code Online (Sandbox Code Playgroud)

它是用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之间的不同行为也不令人满意,因为如果可能,应该避免使用特定于操作系统的代码.


后来:

使用Ubuntu上可用桌面环境的概述,我安装了几个环境并对其进行了测试.

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

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

Mar*_*k R 0

您尝试过文档建议的事情吗?

Qt::WindowStaysOnTopHint 0x00040000 通知窗口系统该窗口应位于所有其他窗口的顶部。请注意,在 X11 上的某些窗口管理器上,您还必须传递 Qt::X11BypassWindowManagerHint才能使该标志正常工作。

另一件事为什么你希望其他窗口成为子窗口,如果你在父窗口下是什么?