Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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!


  • Moderators

    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();
    }
    


  • @J-Hilk Danke für deine Antwort, aber ich verstehe nicht ganz wie ich das auf meinen Fall anwenden soll, da schon bei der Initialisierung ein Fehler ausgegeben wird...


  • Lifetime Qt Champion

    @Jakobm789 said in QShortcut release:

    ein Fehler ausgegeben wird...

    welcher?



  • @jsulm Okay funktioniert doch, mein Fehler🤦‍♂️.
    Vielen Dank euch beiden!


Log in to reply