Seite 1 von 1

Wie Popup-Message erstellen?

Verfasst: 10. September 2013 19:32
von MADsCIENTIST
Hallo liebe Community,

ich möchte gerne in meinem Programm eine Popup-Meldung in der Nähe des System-Trays
(oder auch an einer beliebigen anderen Stelle des Displays) anzeigen lassen.
[so wie man es beispielsweise bei dem Antivirenprogramm "Avast" sehen kann]

Dabei soll es sich aber auch wie beim geöffneten Overlay von Steam oder Origin verhalten, also vor
einer Anwendung im Full-Screen-Mode angezeigt werden können!

Wie implementiere ich sowas?


Bedanke mich für sinnvolle Hilfe schon mal im Voraus.

Re: Wie Popup-Message erstellen?

Verfasst: 12. September 2013 00:21
von hilefoks
Moin,

eigentlich wie jedes andere Fenster auch - also ein QWidget. Mit passenden Qt::WindowFlags kannst du dieses Widget rahmenlos gestalten und z.B. mit dem Flag Qt::WindowStaysOnTopHint immer im Vordergrund halten lassen. Natürlich musst du es auch passend positionieren (QWidget::move()). Falls du Qt5 verwendest, könnte dir dabei QDesktopWidget hilfreich sein, den du musst ja die Auflösung des Displays berücksichtigen.

MfG,
Hilefoks

P.S: Da ich weder Avast, Steam noch Origin kenne, sagen mir diese Vergleiche auch nix. ;-)

Re: Wie Popup-Message erstellen?

Verfasst: 13. September 2013 16:37
von MADsCIENTIST
Vielen Dank für deine Antwort.

Ich habe das jetzt schon so weit wie möglich implementiert, dass es zumindest bei
normaler Desktop-Nutzung angezeigt wird und sich über bestehende Full-Screen-
Anwendungen legt.

Mein Widget habe ich mit folgenden Flags belegt:

Code: Alles auswählen

setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Window)
Leider funktioniert noch nicht das Overlay bei Spiele-Anwendungen!
Wie kann ich das nun für OpenGL- u. DirectX-Anwendungen bewerkstelligen?

Re: Wie Popup-Message erstellen?

Verfasst: 15. September 2013 05:08
von veeman
Wie wäre es mit QSystemTrayIcon

Re: Wie Popup-Message erstellen?

Verfasst: 16. September 2013 13:53
von RHBaum
QSystemTrayIcon hilft ihm ned weiter, da er bei spielen im Grafik vollbild modus ist .... also die menuleiste sowieso nicht sieht ^^

Einige ... aber nur Einige ....Spiele unterstuetzen "Vollbild im Fenstermodus". Das heisst, dort kann man via tab auch andere Fenser in den Vordergrund holen, und das spiel selber rendert weiter im hinterliegenden Vollbild.

Bei Spielen die nur 3d Grafik im reinen Vollbild unterstuetzen, hasst auf "normalen Weg" keine chance ...
Dort musst mit "richtiger" Overlay technik arbeiten. D.H. du musst von einem fremden prozess aus (deinem) auf das selbe Handle schreiben, wie der directX Prozess (vom Spiel).
Da gibts auch mehrere Möglichkeiten, die aber Versionsabhaengig von der directX sind ....
Such mal im Inet nach "directx dll injection" und "directX graphic overlay" und Co ... um einen ueberblick zu bekommen.
Das ist alles andere als trivial und fehlerunanfallig ...
Viele overlay Programme (steam, neuerdings auch teamspeak3 wieder, fraps .... ) haben auch aktuell probleme mit immer wieder ein paar games ^^
die Grafik ausgabe in Ressourcen anderer prozesse, in dem Falle vom Vollbild der DirectX ausgabe, ist von Microsoft nicht vorgesehen.
Dafuer gibts die Fenstertechnik und die Verwaltung dafuer(Desktop). Wenn eine DIrectX Anwendung nen Vollbild aufzieht, dann will sie allein sein, uns auch nicht von irgendwelchen Programmen gestoert werden ^^

Ciao ...