2013-04-12 17 views
7

sto provando a mettere un QDockWidget flottato (non sbloccato) in modalità a schermo intero. Su Windows tutto sembra semplice. Ad esempio collego il segnale topLevelChanged() di un dockwidget (DW) ad uno slot personalizzato floatingChanged()QDockWidget showFullscreen non funziona su Ubuntu (gnome)

connect(dw, SIGNAL(topLevelChanged(bool)), this, SLOT(floatingChanged(bool))); 

all'interno della scanalatura posso controllare: se dw è fluttuante e invito DW> showfullscreen().

void MainWindow::floatingChanged(bool floating) 
{ 
    if(floating) 
    { 
     QDockWidget* dw = static_cast<QDockWidget*>(QObject::sender()); 
     dw->showFullScreen(); 
    } 
} 

in finestre disancorato (flottante) QDockWidget passa direttamente alla modalità a schermo intero dopo lo sgancio. Ma con linux (ubuntu 12.04, gnome-shell 3.4.1) questo non funziona (qt 4.8.0). Il widget dock rimane nella modalità normale.

Non riesco a capire come passare un QDockWidget (mobile) in modalità a schermo intero. Qualsiasi soluzione su questo è molto gradita. In realtà i diversi OS stanno agendo in modo diverso a questo scopo.

Ho già cercato sul Web senza esito positivo, quindi questo è il mio primo post qui. Per favore perdonami per errori di ortografia Non sono madrelingua inglese, grazie;)

p.s. Cercherò anche il comportamento dei leoni osx. A proposito: per provarlo basta implementare lo slot floatingChanged() mostrato sopra nella MainWindow dell'esempio Qt http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html e collegarlo con uno qualsiasi degli dockwidgets esistenti o all'interno del metodo MainWindow :: createDockWidget().

+0

Su osx-lion con qt 4.8.2 si comporta diversamente. Il widget dock viene semplicemente visualizzato ingrandito dopo aver chiamato dw-> showFullScreen(). Ciò significa che la barra del titolo è/è stata mostrata; Win XP ha avuto un vero comportamento a schermo intero, in cui la barra del titolo era anche l'assenza - questo è ciò che ho bisogno da una modalità a schermo intero. – xam

+0

Ho trovato una sorta di lavoro con i fogli di stile. L'ho spiegato nel forum Qt-Center: [link] (http://www.qtcentre.org/threads/54178-QDockWidget-showFullScreen%28%29-only-works-on-Windows). Altri suggerimenti sono benvenuti ... – xam

+0

[questo esempio minimo] (http://ideone.com/RIvk4C) si comporta come hai descritto nel tuo setup? Sembra funzionare come previsto sul mio. – brunocodutra

risposta

2

La chiamata a questa funzione showFullScreen() interessa solo le finestre.

La modalità a schermo intero funziona bene in Windows, ma presenta alcuni problemi sotto X. Questi problemi sono dovuti alle limitazioni del protocollo ICCCM che specifica la comunicazione tra i client X11 e il gestore di finestre. ICCCM semplicemente non capisce il concetto di finestre a schermo intero non decorate. Pertanto, il meglio che possiamo fare è richiedere una finestra senza bordi e posizionarla e ridimensionarla per riempire l'intero schermo. A seconda del gestore di finestre, questo potrebbe funzionare o meno. La finestra senza bordi è richiesta usando i suggerimenti MOTIF, che sono almeno parzialmente supportati da praticamente tutti i moderni gestori di finestre. Un'alternativa sarebbe quella di bypassare completamente il gestore di finestre e creare una finestra con il flag Qt :: X11BypassWindowManagerHint. Questo ha altri gravi problemi, come il fuoco della tastiera totalmente rotto e effetti molto strani sui cambiamenti del desktop o quando l'utente solleva altre finestre. I window manager X11 che seguono le moderne specifiche post-ICCCM supportano correttamente la modalità a schermo intero.