Qt :: WA_Translucent Achtergrond beschikbaar overal?

Ik heb een aangepaste widget om ballontips te simuleren. Om correct te worden weergegeven, hangt de widget af van het QWidget-kenmerk Qt :: WA_TranslucentBackground . Mijn applicatie zou moeten werken op alle grote platforms (Windows XP, Windows 7, Linux, Mac), dus ik maak me een beetje zorgen: is dit kenmerk beschikbaar op alle belangrijke platforms? Zo niet, kan ik vragen of dit zo is? testAttribute() doet dat niet. Het retourneert alleen of het kenmerk is ingesteld, niet of het instellen ervan een effect heeft.

6

2 antwoord

Dit zou moeten werken met de enige uitzondering van Linux over X11 wanneer dit is geconfigureerd om ARGB niet te ondersteunen. Raadpleeg de documentatie voor QWidget :

Doorschijnende vensters maken

     

Sinds Qt 4.5 is het mogelijk om vensters met doorschijnend te maken   regio's op venstersystemen die compositing ondersteunen.

     

Als u deze functie in een widget op het hoogste niveau wilt inschakelen, stelt u deze in   Qt :: WA_TranslucentBackground-kenmerk met setAttribute() en zorgen ervoor   dat de achtergrond is geschilderd met niet-dekkende kleuren in de regio's   je wilt gedeeltelijk transparant zijn.

     

Platformnotities:

     

X11: deze functie is afhankelijk van het gebruik van een X-server die ARGB-afbeeldingen en een compositievensterbeheer ondersteunt.

     

Windows: de widget moet de Qt :: FramelessWindowHint-venstervlag hebben ingesteld om de transparantie te laten werken.

Overweeg ook de paragraaf "Transparantie en dubbele buffer" te lezen, misschien interessant.

7
toegevoegd
Ik denk niet dat je daar problemen mee zult hebben met recente hardware/distributies. In elk geval zou u informatie moeten krijgen door xdpyinfo te gebruiken of door het configuratiebestand xorg.conf te bekijken. Mogelijk heeft u wat problemen met embedded Linux-systemen. Dit geeft iets meer: ​​ stackoverloop. com/vragen/2434511/& hellip; .
toegevoegd de auteur Luca Carlon, de bron
Hoe vaak of komt het voor dat een hedendaagse Linux geen ARGB ondersteunt? Kan ik het op de een of andere manier bevragen?
toegevoegd de auteur Sebastian Negraszus, de bron

Voor Linux moet je controleren of compositing is ingeschakeld:

bool QX11Info::isCompositingManagerRunning() [static]

bijv.

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

Deze vraag is oud, maar dit kan iemand helpen.

7
toegevoegd
Merk op dat soms om Qt :: WA_TranslucentBackground te gebruiken om in linux te werken zonder setMask , je ook nog een paar attributen en een venstervlag moet inschakelen. stackoverflow.com/a/30596357/999943
toegevoegd de auteur phyatt, de bron
En voor iedereen die van Google afdwaalt, als je merkt dat je niet-samengestelde desktops moet ondersteunen voor zoiets als een afgeronde OSD of een pop-up met spraakballonnen, dan is de Qt ShapedClock laat zien hoe je setMask kunt gebruiken om een ​​niet-vierkant venster te maken zonder compositing.
toegevoegd de auteur ssokolow, de bron