2013-04-12 8 views
7

Próbuję umieścić pływający (niezadokowany) QDockWidget w trybie pełnoekranowym. W systemie Windows wszystko wydaje się proste. Na przykład mogę podłączyć sygnał topLevelChanged() o dockwidget (DW) do niestandardowego gniazda floatingChanged()Pokaz QDockWidgetFullscreen nie działa w systemie Ubuntu (gnome)

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

wewnątrz sprawdzić gniazda: jeśli dw unosi się i zadzwoń dw-> showFullscreen().

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

w systemie windows undocked (ruchomy) QDockWidget przełącza się bezpośrednio w tryb pełnego ekranu po oddokowaniu. Ale pod linuxem (ubuntu 12.04, gnome-shell 3.4.1) to nie działa (qt 4.8.0). Widżet dokowania pozostaje w normalnym trybie.

Nie mogę dowiedzieć się, jak przełączyć (pływający) QDockWidget w tryb pełnoekranowy. Wszelkie rozwiązania w tym zakresie są bardzo mile widziane. W rzeczywistości różne systemy operacyjne działają w tym celu inaczej.

Już przeszukiwałam sieć bez powodzenia, więc to jest mój pierwszy post tutaj. Proszę wybaczyć mi błędy pisowni nie jestem native speakerem języka angielskiego, thanx;)

p.s. Ja też spróbuję zachowania osx-lwów. Przy okazji: Aby wypróbować, wystarczy zaimplementować wyżej pokazany slot floatingChanged() w MainWindow przykładu Qt http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html i połączyć go z dowolnym istniejącym dockwidget lub wewnątrz metody MainWindow :: createDockWidget().

+0

Na osx-lwie z qt 4.8.2 również zachowuje się inaczej. Widżet doku jest po prostu wyświetlany w postaci zmaksymalizowanej po wywołaniu dw-> showFullScreen(). Oznacza to, że pasek tytułu został/został wyświetlony; Win XP miał prawdziwe pełnoekranowe zachowanie, w którym również brakowało paska tytułu - tego wymagam od trybu pełnoekranowego. – xam

+0

Znalazłem rodzaj pracy przy użyciu arkuszy stylów. Wyjaśniłem to na forum Qt-Center: [link] (http://www.qtcentre.org/threads/54178-QDockWidget-showFullScreen%28%29-only-works-on-Windows). Wszelkie dodatkowe wskazówki są bardzo mile widziane ... – xam

+0

Czy [ten minimalny przykład] (http://ideone.com/RIvk4C) zachowuje się tak, jak opisano w konfiguracji? Wygląda na to, że działa zgodnie z oczekiwaniami. – brunocodutra

Odpowiedz

2

Wywołanie tej funkcji showFullScreen() dotyczy tylko okien.

Tryb pełnoekranowy działa dobrze w systemie Windows, ale ma pewne problemy z X. Problemy te wynikają z ograniczeń protokołu ICCCM, który określa komunikację między klientami X11 a menedżerem okien. ICCCM po prostu nie rozumie koncepcji nieoznaczonych pełnoekranowych okien. Dlatego najlepiej jest poprosić o okno bez obramowania, umieścić i zmienić rozmiar, aby wypełnić cały ekran. W zależności od menedżera okien może to działać, ale nie musi. Okno bez ramki jest wymagane przy użyciu wskazówek MOTIF, które są przynajmniej częściowo obsługiwane przez praktycznie wszystkich współczesnych menedżerów okien. Alternatywą byłoby całkowite pominięcie menedżera okien i utworzenie okna z flagą Qt :: X11BypassWindowManagerHint. Ma to jednak inne poważne problemy, takie jak całkowicie zepsuty nacisk na klawiaturę i bardzo dziwne efekty na zmiany pulpitu lub gdy użytkownik podnosi inne okna. Menedżery okien X11, które stosują się do nowoczesnych specyfikacji post-ICCCM, obsługują tryb pełnoekranowy.

Powiązane problemy