我有一个基于 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 desktop) 或 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 甚至还有一些额外的小问题。