Seite 1 von 2

Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 6:16 pm
von wellnestom
Hallo,
ich habe in meinem Programm 2 Widgets (eigenständige, also keine childs) im Fullscreen auf 2 Bildschirmen.
In einem TimerEvent wird eine Variable überprüft. Wenn ihr Wert 0 ist soll der Fokus auf dem einen Widget sein, ist der Wert 1 soll das andere Widget den Fokus haben.
Hab mit

Code: Alles auswählen

this->setFocus();
this->hasFocus();
this->focusWidget();
rumgespielt. Hat aber nichts gebracht.
Auch das ändern von 'focusPolicy' im QtDesigner hat keine Änderung ergeben.
Wie hann ich einem Fenster (widget) sagen "So, jetzt bist du am dransten!"??

Gruß Tom

Re: Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 6:27 pm
von nufan
Bitte ein Archiv zum Spielen ^^

Re: Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 8:04 pm
von wellnestom
Die Datei ist zu groß. Die maximal erlaubte Dateigröße ist 256 KiB.
Naja, hab grad keine Lust die ganzen Grafiken zu entfernen und so... :?
Habs mal das ganze Projekt auf meinen Server hochgeladen.

thomasplohs.de/kitt/KITT-Dash.zip

In den Dateien:
fibi/fibil.cpp Zeile 394
und
fibi/fibir.cpp Zeile 655

soll die Anweisung "Bitte setz den Fokus auf dieses Widget" stehen.
Mit der Taste 'm' wird die überprüfte Variable auf 0 bzw 1 gesetzt. Also der Fokus gewechselt.

Gruß Tom

Re: Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 8:16 pm
von nufan
Ähm... ich krieg nur den Dialog zum Einstellen der Werte und ein schwarzes Fenster im Vollbildmodus ^^ Ich nehme mal an, dass das nicht so sein soll ^^

Re: Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 8:25 pm
von wellnestom
Musst das im Debug modus und ohne Shadow-Build machen sonst findet er die Pfade zu den Grafiken nicht. (oder du kopierst die unterordner dahin wo's bei die erstellt wird)
Es sollten 3 Fenster sein. Hab das mit der Automatischen Bildschirmauswahl noch nicht perfektioniert. Kann sein das ein Fenster auf deinem nicht vorhandenem zweiten Bildschirm ist. Ändere einfach in der main.cpp die Zeile 193

Code: Alles auswählen

fibilinks.setschirm(schirm2.posx,schirm2.posy);
in

Code: Alles auswählen

fibilinks.setschirm(100,200);
um.

OFFTOPIC

Verfasst: Do Jan 17, 2013 8:32 pm
von Xin
wellnestom hat geschrieben:thomasplohs.de
SEHR SEHR GEIL!

Als Kind habe ich Knight Rider auch geliebt. ^^
Ich würde mir zwar lieber einen Airwolf bauen, aber hier denke ich tatsächlich, dass ein KITT realistischer ist.
Bau keinen Turbo Boost ein, man sah zwar immer, wie das Auto abhebt, aber selten, wie es landet und das hatte Gründe ;-)

Re: Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 8:38 pm
von wellnestom
Xin hat geschrieben:SEHR SEHR GEIL!
Danke! :D
Dafür eben die Amaturenbrett-Software für die vielen TFT's.
Die Elektronik selbst bauen kann ich nicht, und fertig kaufen kostet gleich mal 1400,- $
Das kann ich mit Qt und ein paar TFT's billiger und vielfältiger.

Gruß

Re: Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 9:04 pm
von nufan
Soweit ich sehe kapseln die beiden Widgets jeweils eine QGraphicsScene. Was soll das Ziel vom Wechsel des Fokuses sein? Willst du Tastatureingaben in einem anderen Fenster abfragen? Es nur in den Vordergrund holen?

Re: Qt: Fokus setzen - wie?

Verfasst: Do Jan 17, 2013 9:27 pm
von wellnestom
Richtig. Es werden Tastatureingaben abgefragt mit denen ich die Scene 'justieren' kann. Dafür brauch ich aber immer das Fenster das ich einstellen will im Vordergrund.
  • wasd - hoch, runter, links, rechts
    qe - links - rechts rotieren
    rf - zoomen
    F11 - toggle Fullscreen
    F4 - Tageskilometerzähler zurücksetzen
    Numpad + - zwischen den verschiedenen 'Tachos' (Opel, Pontiac orginal, KITT...) umschalten.
    x - Showmode
Die TFT's werden sicher nicht genau die Größe haben oder 'gerade' eingebaut werden können. Deswegen will ich die Szenen seperat einstellen können.
Auch Tastenbefehle für Tageskilometerzähler zurücksetzen usw. sollen abgefangen werden.

Das ist alles noch der Anfang. Ich will noch viele weitere Funktionen einbauen.......

Re: Qt: Fokus setzen - wie?

Verfasst: Fr Jan 18, 2013 8:48 pm
von nufan
Sorry für meine späte Antwort.
Ich hab jetzt endlich genau verstanden um was es geht. Was du suchst sind folgende beiden Aufrufe:

Code: Alles auswählen

  qApp->setActiveWindow( this );
  raise();
Übrigens macht dein Programm beim Drücken von Alt-F4 Probleme und öffnet das Fenster immer wieder neu ^^