grabKeyboard und Fenster verschieben

Alles rund um die Programmierung mit Qt
Antworten
Snafu
Beiträge: 12
Registriert: 8. Januar 2008 19:41

grabKeyboard und Fenster verschieben

Beitrag von Snafu »

Hallo!
Ich hab da ein kleines Problem.
Ich verwende grabKeyboard() um alle Tastenschläge abzufangen, doch wenn das grabKeyboard() aktiv ist kann ich das Fenster nicht mehr verschieben. Erst nach releaseKeyboard() kann ich das Fenster wieder verschieben.
Mein Gedanke mit grabMouse() wird das dann wieder gehen ging nach hinten los. Ich endete damit, dass ich das Programm nicht mehr schließen kann weil ich weder mit Alt+Tab noch mit Mausklick noch irgendwas anderes auf die Shell wechseln kann um dort abzubrechen (das x im Fenster ging auch nicht :P ). Hab dann mit Str+Alt+F6 nochmal eingeloggt und das Prog gekillt und danach wieder das grabMouse() rausgenommen.
Wie kann ich denn das Fenster verschieben, wenn ich grabKeyboard() an hab?

LG Snafu
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

hi,

in der Doku wird vor grabMouse() und grabKeyboard() wegen dieser "einnehmenden" Eigenschaft gewarnt.
Aber, versuch es doch mal mit "QApplication::processEvents()" dazwischen. Wo dazwischen ist natürlich die Frage - musst du mal etwas probieren, oder auf eine klare Antwort von jemand warten, der sich wirklich auskennt :wink:
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Snafu
Beiträge: 12
Registriert: 8. Januar 2008 19:41

Beitrag von Snafu »

qtNiko hat geschrieben:Aber, versuch es doch mal mit "QApplication::processEvents()" dazwischen. Wo dazwischen ist natürlich die Frage - musst du mal etwas probieren, oder auf eine klare Antwort von jemand warten, der sich wirklich auskennt :wink:
Hmm... eigenartig, hab gerade festgestellt, dass dieses Problem nur unter Linux auftaucht. Unter Windows kann ich das Fenster problemlos verschieben.

Bez. QApplication::processEvents():
Ich fange die Events in einem eventFilter ab. Soll ich einfach QApplication::processEvents() ganz am Anfang vom EventFilter machen?

LG
Snafu
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

hi,

habe deine Rückfrage fast übersehen :cry:

Ich bin sicher nicht der Experte, aber QApplication::processEvents() dient dazu, dass Tasten und Klicks auf Buttons, etc. auch dann bearbeitet werden, wenn der Rechner gerade voll beschäftigt ist.
Ich bin mir aber nicht sicher, ob QApplication::processEvents() da hilft. Es wäre halt einen Versuch wert - wenn es nicht bereits zu spät ist.
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

Beitrag von ObeliX »

also wie da QApplication::processEvents() helfen soll ist mir nicht klar.
(allerdings leuchtet mir auch nicht ein, warum grabKeyboard() das verschieben des fensters verhindert :roll: ... kann aber schon sein, so genau kenn ich die lage da nicht)

habe ich das richtig verstanden, daß die schon einen eventFilter hast ? warum dann noch das grabKeyboard() ? (oder wolltest du den eventFilter einrichten wegen dem processEvents()-versuch ?)

ich denke der eventFilter-ansatz ist hier die richtige herangehensweise.


Obel
Snafu
Beiträge: 12
Registriert: 8. Januar 2008 19:41

Beitrag von Snafu »

Ich verwende "zusätzlich" zum eventFilter grabKeyboard() damit ich die Pfeiltasten abfangen kann ohne dass sie den aktuellen Focus wechseln.
Hab das nur so geschafft.
Ich kenne mich leider kaum aus mit Qt, ist eigtl auch mein Erstes Mal mit C++ :D
Der "Bug" tritt wie gesagt nur unter linux auf.
Antworten