QShortcut release
-
Moin,
ich verwende in einem Programm ein QShortcut und würde gerne eine Funktion ausführen, wenn dieses Shortcut nicht mehr aktiv ist. Ist das in irgendeiner Form möglich? Habe auch schon von keypressevents gelesen, habe aber nichts genaueres herausfinden können. Ich würde die Funktionen gerne in etwa so verwenden:
test.cpp:new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_D), this, SLOT(shortcut_pressed())); void test::shortcut_pressed() } D=1; } void test::shortcut_released() { D=0; }
Also soll quasi während der Shortcut betätigt ist D=1 sein und wenn der Shortcut wieder losgelassen wird D=0.
Vielen Dank für eure Hilfe! -
Hi @Jakobm789
ich hab leider nicht soviel Erfahrung mit QShortcut, aber, wenn man sich die Dokumentation anschaut, findet man den Eintrag über autorepeat:
This property holds whether the shortcut can auto repeat If true, the shortcut will auto repeat when the keyboard shortcut combination is held down, provided that keyboard auto repeat is enabled on the system. The default value is true.
Das, in Kombination mit einem QTimer, der ausläuft, wenn er nicht durch das signal neu gestartet wird, sollte dein Problem lösen
so in etwa:
int main (int argc, char *argv[]) { QApplication app(argc, argv); QLabel w ("P not pressed"); w.resize(200,200); w.show(); QShortcut sh(&w); sh.setKey(Qt::CTRL + Qt::Key_P); QTimer tReset; QObject::connect(&tReset, &QTimer::timeout, &w, [&w, &tReset]()->void{ tReset.stop(); w.setText("P not pressed"); }); QObject::connect(&sh, &QShortcut::activated, &w, [&w, &tReset]()->void{ w.setText("P is pressed"); tReset.start(800); }); return app.exec(); }
-