Seite 1 von 1

QT Anwendung immer im Vordergrund

Verfasst: 4. Januar 2007 11:17
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.

Verfasst: 4. Januar 2007 11:42
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.

Verfasst: 4. Januar 2007 12:02
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

Verfasst: 4. Januar 2007 12:18
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.

Verfasst: 4. Januar 2007 12:48
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

Verfasst: 4. Januar 2007 13:00
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.