2 Stimmen

Gibt es eine "einfache" Möglichkeit, anpassbare Tastaturkürzel zu meiner Qt4-App hinzuzufügen?

Ich habe eine umfangreiche Qt-Anwendung, die seit den Qt 3-Tagen in der Entwicklung ist und jetzt Dutzende von Fenstern mit Tausenden von Menüpunkten, Steuerelementen und anderen vom Benutzer auslösbaren Aktionen enthält. Sie wird derzeit unter Qt 4.6 kompiliert, für Linux, MacOS/X und Windows.

Der neue Funktionswunsch von ganz oben ist, dass der Benutzer in der Lage sein sollte, alle Tastenkombinationen in dieser Anwendung anzupassen... d.h. es sollte einen Menüpunkt "Tastenkombinationen anpassen..." geben, der, wenn er ausgewählt wird, einen Dialog öffnet, der alle Aktionen in der Anwendung und ihre aktuelle Tastenkombination (falls vorhanden) auflistet und es dem Benutzer erlaubt, Tastenkombinationen für alle Aktionen, die ihm wichtig sind, zuzuweisen oder zu ändern und dann seine Einstellungen zu speichern und die Anwendungen mit seinen eigenen angepassten Tastenkombinationen zu verwenden.

Dies scheint wie eine ziemlich ehrgeizige Sache zu implementieren, in Anbetracht der Anzahl der tastaturgesteuerten Aktionen in der App, und ich frage mich, ob es irgendwelche bestehenden Klassen oder Code-Bibliotheken zur Verfügung, um in dieser Art von Sache zu unterstützen, oder wenn es etwas, das ich von Grund auf selbst implementieren müssen. Das Qt-Internationalisierungssystem, insbesondere, scheint, wie es angepasst werden könnte, um mit so etwas wie dies zu helfen - der Unterschied ist, dass anstelle von (eigentlich zusätzlich zu) der Entwickler die Auswahl von Tastenkombinationen vor dem Versand der App, die Benutzer könnten wählen/ändern Tastenkombinationen während der Verwendung der App (wenn sie nicht glücklich mit den ausgelieferten Standardeinstellungen sind, natürlich).

Hat jemand Tipps oder Hinweise auf Code oder Ansätze zur Implementierung dieser Funktion?

0 Stimmen

Nach dem, was ich über die Übersetzung weiß, würde sie für diesen Bedarf nicht gut funktionieren. Die anderen Aspekte der Internationalisierung könnten funktionieren, aber ich würde vermuten, dass die meisten Leute einfach die Internationalisierung von Shortcuts in die Übersetzungen der Strings einbetten, die mit den Shortcuts verbunden sind, indem sie Qts '&'-Interpretation verwenden.

2voto

Harald Scheirich Punkte 9506

Ich stimme JimDaniel zu, es klingt, als ob der allgemeinste Ansatz darin bestünde, eine QAction für alles zu erstellen, was über eine Tastenkombination ausgeführt werden soll. Der Benutzer konfiguriert dann die entsprechende Tastenkombination für jede Aktion.

Dies ist definitiv ein sauberer Weg, dies zu implementieren, als die Ereignisse überschreiben, es auch dann können Sie Ihre Aktionen in Menüs und Symbolleisten setzen, ich weiß nicht, wie viel Arbeit dies für Ihre Anwendung sein würde.

0voto

JimDaniel Punkte 12283

Sie könnten die Bindungen in einer Anwendungskonfigurationsdatei speichern und diese beim Start der Anwendung einlesen. Wenn der Benutzer dann die Bindungen ändert, aktualisieren Sie diese Datei. Keys sind im Qt-Framework einfach Enums. Sie können das entsprechende keyPressEvent() oder keyReleaseEvent() überschreiben, die gedrückte(n) Taste(n) überprüfen und mit den aktuellen Bindungen abgleichen.

0 Stimmen

Stimmt - aber das ist, was ich als "von Grund auf neu schreiben" bezeichnen würde. Da dies wie eine nicht-anwendungsspezifische Funktion scheint, habe ich mich gefragt, ob es eine bereits verfügbare QKeyBindingsDialog-Klasse oder etwas irgendwo, die ich in fallen könnte.

1 Stimmen

Ich nehme an, man könnte es mit ein wenig Aufwand mit QActions generisch machen, aber ich kenne kein existierendes Widget für diesen Zweck. Wenn Sie es generisch machen, sollten Sie es irgendwo posten, wo andere es verwenden können :-)

0voto

azf Punkte 2139

Hier ist, was ich vor diesem Thread gefunden habe:

http://doc.qt.nokia.com/qq/qq14-actioneditor.html

Es ist in Qt3, aber ich denke, es ist möglich, es in Qt4 zu schreiben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X