Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu QKeyEvent
Hallo Leute,
ich möchte per QKeyEvent innerhalb einer Tabelle suchen. Wenn ich also eine bestimmte Taste drücke, soll die Suchfunktion aufgerufen und innerhalb der Tabelle der nächste passende Eintrag gefunden werden.
Das klappt genau einmal. Anschließend geht wohl irgendwie der Focus verloren.
Wenn ich das erste Mal auf die Taste drücke, springe ich zu dem ersten Eintrag, den ich dann z.B. veränder. Wenn ich dann auf die Taste drücke, passiert nichts. Zuerst dachte ich, dass es daran liegt, dass ich noch innerhalb der Zelle bin, aber selbst wenn ich "enter" drücke und ich die Zelle verlasse, passiert nichts. Theoretisch muss doch die Tabelle den Focus haben, oder? Wie bekomme ich es hin, dass nach dem Editieren wieder die ganze Tabelle den Focus hat?
Vielen Dank,
anda_skoa
27-08-2005, 00:36
Vielleicht über eine Action mit entsprechendem Accelerator?
Ciao,
_
Hallo anda_skoa,
wie meinst du das genau? Also, ich weiß, dass im Popupmenu QActions enthalten sind und man & vor einen Buchstaben schreiben kann und dadurch ein Hotkey entsteht. Geht das auch, wenn das Fenster bzw. die Tabelle keinen Fokus hat? Passiert da nicht das gleiche wie bisher? Theoretisch funktioniert ja meine Taste, aber dann geht der Fokus verloren. Ich hatte schon eine Version, bei der ich nach dem Tastendruck meinem Fenster den Fokus gegeben habe. Damit konnte ich immerhin suchen, und zwar mehr als einmal. Wenn man allerdings einen Wert änderte, konnte man anschließend nicht mehr suchen, weil der Fokus weg war. Wenn ich "enter" drücke, wer bekommt dann den Fokus? Die Tabelle oder das nächste Item? Theoretisch das Item, oder? :confused:
Schöne Grüße,
anda_skoa
27-08-2005, 12:12
Ich dachte eher an eine Action im Hauptmenü, normalerweise ist Suchen ja irgendwo in "Bearbeiten"
Man kann beim QAction Konstructor einen Accelerator angeben, also zB CTRL+F für Suchen(Find), bzw. CTRL+O für Öffen(Open)
Ich glaube das Accelerators immer zuerst durchgesehen werden, bevor ein KeyEvent an die normalen Widgets weitergeleitet wird.
Ciao,
_
Hallo anda_skoa,
wenn ich das mache, wird das Such-Fenster geöffnet. Das klappt ja auch, aber das ist nicht das Problem. Ich möchte die Suche in der Tabelle ohne das Fenster durchführen. Es sollen zwar die Einstellungen ausgelesen werden, aber das mache ich, bevor ich die Suche starte. Das Such-Fenster wird am Anfang erstellt und mit hide() ausgeblendet. Statt es mit show() wieder einzublenden, lese ich nur die Werte aus.
Schöne Grüße,
anda_skoa
27-08-2005, 18:31
Du hast ja vermutlich einen Slot damit verbunden, oder?
Zwingt dich vermutlich nichts dazu, dort den Dialog sichtbar zu machen oder versteh ich da was nicht richtig?
Ciao,
_
Hallo anda_skoa,
manchmal muss ich ja auch den Dialog zeigen, wenn ich nämlich die Suchkriterien ändern möchte.
Ich habe meinen Hotkey auch mit einem Funktionsaufruf verbunden. Dabei öffne ich den Dialog nicht. Einmal wird die Suchfunktion auch richtig aufgerufen, aber anschließend stimmt was mit dem Fokus nicht. Sobald ich einmal in der Tabelle drinstecke, funktioniert der Hotkey nicht mehr.
Schöne Grüße,
anda_skoa
27-08-2005, 22:30
Du könntest zwei Actions benutzt, andere Programme tun das auch
zB STRG+F startet eine neue Suche, F3 sucht mit den aktuellen Einstellungen weiter.
Ciao,
_
Hallo anda_skoa,
eigentlich ist es momentan fast so. ;)
Das funktioniert auch. Nämlich einmal. Anschließend wird auf F3 nicht mehr reagiert. Wenn ich meinen Dialog starte, gibt es kein Problem. Da klappt die Suche. Ich benutze allerdings keine zwei QActions, sondern eine QAction und einmal QKeyEvent(). Macht das einen Unterschied?
Das Problem ist irgendwie der Fokus. Damit ein Fenster auf einen Hotkey reagieren kann, muss es den Fokus haben, oder? Momentan fange ich F3 in meiner Tabelle und meinem Fenster im Workspace ab und sende ein Signal an den Workspace. Dieser ruft dann die Suchfunktion auf. Anscheinend hat zwischendurch aber weder meine Tabelle noch das Fenster drumherum den Fokus. Es wird einfach nicht mehr auf F3 reagiert.
Ich denke, beim Schreiben in einer Tabelle hat das Item den Fokus, oder? Wer bekommt den Fokus, wenn ich "enter" drücke? Das nächste Item? Wie gebe ich der Tabelle den Fokus? Muss ich "enter" abfangen (z.B. mit einem EventFilter) und einfach table->setFocus() hineinschreiben? Dann würde bei jedem Enter die Tabelle den Fokus bekommen.
Schöne Grüße,
anda_skoa
28-08-2005, 12:27
Der Unterschied ist, daß Tastendruck Events zuerst an die Objekte mit Accerelator gehen und dann an die Komponente, die den Fokus hat.
Darum ist "Weitersuchen" praktisch auch immer eine QAction, weil die immer zuerst dran kommt.
Wenn du es mit einem Event machen mußt, versuch mal einen Eventfiter am viewport() des Tables.
Ciao,
_
Hallo anda_skoa,
ich denke nicht, dass ich es unbedingt mit einem Event machen muss. Ich wusste nur vorher nicht, dass es einen Unterschied zwischen einer QAction und einem QEvent gibt. Wenn du meinst, dass es mit einer QAction gehen müsste, probier ich es aus. Muss ich dann die QAction einfach dort erzeugen, wo ich auch die anderen erzeuge, die für die Popupmenüs gebraucht werden? Ich setze diese QAction dann nicht in ein OPopupMenu, sondern setze meinen Workspace als parent, oder?
Schöne Grüße,
Kirstin
anda_skoa
28-08-2005, 15:01
Du kannst sie erzeugen wie die anderen Actions, auch zum Menü hinzufügen, nur dann einfach mit setVisible(false) verstecken.
Ciao,
_
Hallo anda_skoa,
vielen Dank für deine Hilfe. Die Suche mit dem Hotkey (F3) klappt jetzt. Allerdings gibt es eine kleine Einschränkung: Sie klappt nur, wenn ich die QAction nicht verstecke. Sobald ich setVisible( false ) benutze, funktioniert F3 nicht. Kann man das Problem noch irgendwie beheben? Andererseits ist es vielleicht auch nicht dumm, wenn der Eintrag vorhanden ist, damit der Benutzer weiß, welche Taste er zum Weitersuchen benutzen soll, oder? Dann müsste der Eintrag "Weiter Suchen" im Popupmenu allerdings auch mit demselben Slot verbunden werden, also kein Fenster öffnen, sondern nur suchen, aber das wäre ja auch ok, oder?
Schöne Grüße,
anda_skoa
29-08-2005, 13:40
Andererseits ist es vielleicht auch nicht dumm, wenn der Eintrag vorhanden ist, damit der Benutzer weiß, welche Taste er zum Weitersuchen benutzen soll, oder?
Ja, denke auch daß das gut wäre.
Dann müsste der Eintrag "Weiter Suchen" im Popupmenu allerdings auch mit demselben Slot verbunden werden, also kein Fenster öffnen, sondern nur suchen, aber das wäre ja auch ok, oder?
Sehe da auch kein Problem, soll ja immer das selbe bewirken, unabhängig wie man die Action auslöst
Ciao,
_
Hallo anda_skoa,
vielen Dank noch mal für deine Hilfe. Die Suche klappt, und der Eintrag im Popupmenü ist wirklich sinnvoll. Ich lasse es nun so.
Schöne Grüße,
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.