Ich baue eine Benutzeroberfläche in Qt 5.9, die auf einem X11-Display ausgeführt werden muss. Ich versuche, Schlagschatten zu meinen Dialogfenstern hinzuzufügen - aber sie funktionieren nicht über X11.Wie erstelle ich einen Qt Drop Shadow ohne Verwendung von Transparenzen? (Weil der Fenstermanager dies nicht unterstützt)
Der Ansatz, den ich nehme, stammt aus der Antwort von zeFree in This Question. (Setzen Sie alles in das Fenster in einem Widget, setzen Sie das Fenster durchsichtig und erstellen Sie einen Dropshadow-Effekt für das Widget).
setAttribute(Qt::WA_TranslucentBackground); //enable Window to be transparent
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
ui->widget->setGraphicsEffect(effect);
Es ist großartig in meinem RedHat vm funktioniert:
Aber wenn ich an die X11-Display sende mich, es sieht aus wie die Transparenz nicht unterstützt wird, und ich erhalte den Schatten auf statt schwarz:
Meine Frage ist: gibt es eine Möglichkeit, meine Dialoge projizieren einen Schlagschatten machen auf meine Hauptfenster statt auf ihren eigenen (transparenten) Hintergrund? Meine Anwendung wird im Vollbildmodus auf dem X11-Display angezeigt, sodass ich mich nicht um Schatteneffekte außerhalb des Fensters kümmern muss.
Jede Antwort, die mir einen sauberen Schattenwurf auf diesem X11-Display gibt, wird akzeptiert.
Danke für die Eingabe. Haben Sie Referenzen oder Beispiele für die Ansätze, die keine Transparenzen verwenden? Ich erwog die Möglichkeit, ein Widget in meinem Hauptfenster unter dem Dialog zu erstellen. Dann müsste ich es verstecken, wenn der Dialog verschwindet. Ich denke, für diese Anwendung kann ich die Notwendigkeit vermeiden, den Dialog zu verschieben - so könnte das Szenario vereinfacht werden. – spickesj
Ich nicht, aber seine Linux, wird es wahrscheinlich eine Möglichkeit sein, Pixel aus dem x Framebuffer zu kopieren. Suche ein wenig. – dtech