Catching a key combination like(ALT+G) and Simulating the combination on a Button Push



  • Hi all,
    I am trying to catch a key combination in my keypress event.The code I am trying is as follows.But as soon as I press the alt key the code in my if statement is directly executed.Thinking of adding a small delay to give the user some time to add other keys to the combination.Wondering if this is a good way to go about it.

    Also is there an easy way I can simulate the same key combination when a user presses a push button for example.I mean in a slot that responds to that button's clicked() signal.
    Thanks for your time.

    @void Widget::keyPressEvent( QKeyEvent * event )
    {
    if(event->modifiers()&&Qt::AltModifier!=0)
    {
    //--->>DELAY IDEA HERE<<<----
    //DO SOMETHING
    }

    }@



  • Hi musimbate.
    Don't put any delay in event body. Try this:
    @if(event->key() != Qt::Key_Alt)
    {
    if(event->modifiers()&Qt::AltModifier)
    {
    qDebug()<<QString("Alt+%1").arg(event->text());
    }
    }@



  • Thanks qxoz
    Your code is catching my combination.I also want to know if I am simulating the same combination the right way by the following code:
    @void Widget::simulateGKey()
    {
    //QKeyEvent *event = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifiers);
    // QCoreApplication::postEvent (receiver, event);

     QTest::keyClick(this, Qt::Key_G,Qt::AltModifier);
    

    }@

    I know the code that is commented out is the best way to do this but I am only getting a key press and the event->text() code gives nothing.

    Thanks for your time.



  • Try this:
    @QKeyEvent key_press(QKeyEvent::KeyPress, Qt::Key_G, Qt::AltModifier, NULL, false, 0 );
    QApplication::sendEvent(this, &key_press);

    QKeyEvent key_release(QKeyEvent::KeyRelease, Qt::Key_G, Qt::AltModifier, NULL, false, 0 );
    QApplication::sendEvent(this, &key_release);@


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.