QT Anwendung immer im Vordergrund

Alles rund um die Programmierung mit Qt
Antworten
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

QT Anwendung immer im Vordergrund

Beitrag von RealProgrammer »

Hallo,

ich möchte, dass sich meine Qt Anwendung nicht in den Hintergrund klicken lässt(z.B. so wie bei ICQ). Dazu wollte ich eine Logik verwenden die meinen Programm mitteilt das es in den Hintergrund geklickt wurde. Um dann dem WindowManager zu sagen das er die Anwendung wieder in den Vordergrund holt. Nur fehlt mir leider eine Event oder sowas das ausgelöst wird wenn die Anwendung in den Hintergrund rückt. So habe ich das früher mit den Motif Programmen gemacht.

Zudem fehlt mir noch ein Aufruf der mit eine Appshell füllt. Früher habe ich das imm so gemacht, funktioniert aber leider nicht.

Code: Alles auswählen

appshell = XtAppCreateShell(NULL, "bla",applicationShellWidgetClass, display, args, argcount);
Vielen Dank für eure Mühe,

Da Real


P.S.
Dies:

Code: Alles auswählen

 KWin::setState(this->winId(), NET::StaysOnTop);  
funktioniert leider nicht da ich nicht mit dem KDE arbeite.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Qt::WindowStaysOnTopHint zu den Windowflags. Das sorgt dafür das dein Fenster immer vorne ist, was aber nicht heißt, das auch deine App immer die gerade aktive ist, was ja auch übel wäre.
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag von RealProgrammer »

Ich soll also meinem Code

Code: Alles auswählen

Widget.setWFlags(Qt::WindowStaysOnTopHint);
einfügen? Also für Widget setze ich natürlich meine Anwendung ein. Wenn ich dies tue bekomme ich aber immer den Fehler:

Code: Alles auswählen

`WindowStaysOnTopHint' is not a member of type `Qt'
Aber danke schonmal für deine Antwort.

Da Real
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Z.B. in den Konstruktor deines Dialogs

Code: Alles auswählen

	setWindowFlags( (windowFlags() | Qt::WindowStaysOnTopHint )
RealProgrammer hat geschrieben:

Code: Alles auswählen

Widget.setWFlags(Qt::WindowStaysOnTopHint);
Kann es sein das Du von Qt3 redest? Dann solltest Du das auch wähnen. So kann man es nur zufällig an der Fehlermeldung und am setWFlags erkennen.

Qt3 kennt noch kein WindowStaysOnTopHint, da heißt es noch Qt::WStyle_StaysOnTop. Mein Beispiel oben bezieht sich auf Qt4, bei Qt3 sind die Befehle etwas anders.
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag von RealProgrammer »

Ja ich arbeite mit Qt3, hab ich wohl vergessen zu erwähnen. Danke für deine Hilfe aber trotz des setzen des WindowFlags läst sich die Anwendung in den Hintergrund klicken. Ich würde eher dazu tendieren das mit dem Event und dem WindowManager zu realisieren. Bin immer aber auch immer offen für andere Ansätze.

Mit freundlichen Grüßen,
Da Real
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

In einer meiner Qt3-Apps gibt es einen SplashScreen, der immer im Vordergrund ist. Aufgerufen wird er so:

Code: Alles auswählen

	SplashDlg* m_pSplash = new SplashDlg(NULL, NULL, true, Qt::WType_Dialog | Qt::WStyle_Customize | Qt::WStyle_DialogBorder | Qt::WStyle_StaysOnTop );
Wie gesagt, der Dialog ist immer vorne, Applikationen im Hintergrund lassen sich aber weiterhin bedienen. Hab das aber nie unter Linux getestet, läuft hier nur für Win.
Antworten