Ho un'applicazione a schermo intero basata su Qt. Le applicazioni a schermo intero dovrebbero essere sempre in primo piano perché altrimenti una parte della finestra sarà ostruita. Voglio che la finestra a schermo intero frameless abbia finestre figlio (finestre di dialogo speciali, ..). Queste finestre secondarie dovrebbero essere mostrate nella parte superiore della finestra a schermo intero. Non ha molto senso mostrarli qui sotto.Con Qt sotto Gnome 3, Xfce e Unity una finestra a schermo intero con una finestra secondaria non rimane in primo piano
A breve, autonomo esempio è:
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_()
E 'scritto in Python e testato su Python 3.X + PySide 1.2.2 (Qt 4.8) + Ubuntu 14.04 (unità desktop) o Windows 7. Tuttavia la trasformazione in C++ Qt (o PyQt) dovrebbe essere semplice.
L'osservazione è che su Windows tutto è come descritto all'inizio. Il Qt.WindowsStaysOnTopHint
non è necessario, mentre su Ubuntu lo è.
Su Ubuntu Vedo che la finestra principale inizialmente l'intero schermo è in cima a tutto, ma non appena viene creata una finestra di dialogo figlio le solite decorazioni desktop (in alto e barre a sinistra) vengono visualizzati sopra lo schermo intero della finestra principale ostruente parte della vista! Non appena la finestra secondaria è chiusa, la finestra a schermo intero è nuovamente in primo piano.
La domanda ora è se c'è qualcosa che può essere fatto per avere una finestra a schermo intero che è in primo piano più finestre figlio su Ubuntu e con Qt?
Il diverso comportamento tra Windows e Linux non è soddisfacente in quanto il codice specifico del sistema operativo deve essere evitato se possibile.
tardi:
Utilizzando the overview of available desktop environment on Ubuntu Ho installato diversi ambienti e li testati.
KDE, Lubuntu (Lxde?) E Openbox funzionano come previsto (e ugualmente su Windows). La finestra principale rimane in primo piano quando viene visualizzata a schermo intero e le finestre figlio sono visualizzate sopra.
Tuttavia per Gnome-Shell (Gnome 3), Xfce, Unity e Awesome la decorazione del desktop rimane in cima alla finestra a schermo intero delle finestre dei bambini vengono visualizzate anche. Xfce e Unity si comportano esattamente alla pari, Gnome e Awesome hanno anche alcuni piccoli problemi aggiuntivi.
Come si comporta in altre distribuzioni Linux con un Qun non-mucked-about (ad esempio Debian)? Ubuntu ha, almeno in passato, hackerato alcune cose Qt per cercare di portarlo in linea con la loro visione particolare (cioè la barra dei menu globale).Googling alcune combo di "Ubuntu qt bug menubar fullscreen" presenterà numerosi problemi; Non ho idea di quale sia la situazione di Ubuntu al momento, ma ho fatto app a schermo intero su Debian, con dialoghi, e funzionano bene. NB: Ubuntu! = Linux! – timday
In KDE (Kubuntu) funziona come previsto. – doru
@doru Buono a sapersi. Quindi probabilmente ho bisogno di limitare l'ambito da Linux a Ubuntu. – Trilarion