![](/img/trans.png)
[英]Creating a new window that stays on top even when in full screen mode (Qt on Linux)
[英]With Qt under Gnome 3, Xfce and Unity a full screen window with a child window doesn't stay 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之间的不同行为也不令人满意,因为如果可能,应该避免使用特定于操作系统的代码。
后来:
使用Ubuntu上可用桌面环境的概述,我安装了几个环境并对其进行了测试。
KDE,Lubuntu(Lxde?)和Openbox按预期工作(同样适用于Windows)。 当全屏显示时,主窗口保持在顶部,并且上方显示子窗口。
然而,对于Gnome-Shell(Gnome 3),Xfce,Unity和Awesome,桌面装饰保持在全屏模式的顶部,也显示了儿童窗口的窗口。 Xfce和Unity表现完全相同,Gnome和Awesome甚至还有一些小的额外问题。
你尝试了文件建议的东西吗?
Qt :: WindowStaysOnTopHint 0x00040000通知窗口系统窗口应该保持在所有其他窗口之上。 请注意,在X11上的某些窗口管理器上,您还必须传递Qt :: X11BypassWindowManagerHint才能使此标志正常工作。
另一件事你为什么要让其他窗口成为一个孩子,如果你在父母的下面呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.