2011-10-27 10 views
5

Mam niestandardowy widget do emulacji końcówek balonu. Aby wyświetlać się poprawnie, widget zależy od atrybutu QWidget Qt::WA_TranslucentBackground. Moja aplikacja powinna działać na wszystkich głównych platformach (Windows XP, Windows 7, Linux, Mac), więc martwię się trochę: czy ten atrybut jest dostępny na wszystkich głównych platformach? Jeśli nie, czy mogę zapytać, czy tak jest? testAttribute() tego nie robi. Zwraca tylko informację, czy atrybut został ustawiony, a nie czy ustawienie ma efekt.Qt :: WA_TranslucentBackground dostępne wszędzie?

Odpowiedz

6

Powinno to działać z wyjątkiem systemu Linux na X11, gdy jest skonfigurowany, aby nie obsługiwać ARGB. Zapoznaj się z dokumentacją QWidget:

Tworzenie Przezroczyste okna

Od Qt 4.5, możliwe stało się tworzenie okien z półprzezroczyste regionów w systemach okiennych, które obsługują komponowanie.

Aby włączyć tę funkcję w widgecie na najwyższym poziomie, ustaw jego Qt :: WA_TranslucentBackground atrybut z setAttribute() i upewnić się, że jego tło jest malowany niemętne kolorów w regionach chcesz być częściowo przezroczysty .

notatki Platforma:

X11: Funkcja ta polega na wykorzystaniu serwera X, który obsługuje wizualizacje ARGB i menedżera okien z opcją składania.

Okna: Widżet musi mieć ustawioną flagę okna Qt :: FramelessWindowHint, aby półprzezroczystość działała.

Warto również przeczytać akapit zatytułowany "Przezroczystość i podwójne buforowanie".

+0

Jak powszechny lub rzadki jest współczesny system Linux, który nie obsługuje ARGB? Czy mogę go jakoś zapytać? –

+0

Nie sądzę, że będziesz mieć z tym problemy z najnowszym sprzętem/dystrybucjami. W każdym razie powinieneś uzyskać informacje używając xdpyinfo lub patrząc na plik konfiguracyjny xorg.conf. Być może masz problemy z wbudowanymi systemami linuksowymi. Daje to coś więcej: http://stackoverflow.com/questions/2434511/what-pixel-format-does-x-server-use. –

7

przypadku systemu Linux należy sprawdzić, czy jest włączony compositing:

bool QX11Info::isCompositingManagerRunning() [static] 

np

#ifdef Q_WS_X11 
    if(QX11Info::isCompositingManagerRunning()) 
     setAttribute(Qt::WA_TranslucentBackground); 
#endif 

To pytanie jest stare, ale to może pomóc komuś.

+1

Dla każdego, kto błąka się w Google, jeśli potrzebujesz wsparcia dla niezespolonych komputerów, na przykład zaokrąglone menu ekranowe lub dymek, Qt [ShapedClock] (https://doc.qt.io/ qt-5/qtwidgets-widgets-shapedclock-example.html) przykład demonstruje, jak użyć 'setMask' do utworzenia okna nieprostokątnego bez kompozytu. – ssokolow

+0

Zauważ, że czasami aby 'Qt :: WA_TranslucentBackground' działało w Linuksie bez' setMask', musisz również włączyć kilka dodatkowych atrybutów i flagę okna. https://stackoverflow.com/a/30596357/999943 – phyatt

Powiązane problemy