Qt klawisze strzałek nie działają

0

mam problem otóż próbuję aby po naciśnięciu strzałki (w tym przypadku w lewo) działała odpowiednia funkcja jednak tak:

if (event->key() == Qt::Key_Left)
    {   MainWindow::on_Left_clicked();  }

nie działa ta funkcja (wypisuje do labela tekst lewo na razie), a najciekawsze jest to ze to:

if (event->key() == Qt::Key_A)
    {   MainWindow::on_Left_clicked();  }

działa poprawnie.

Może znacie jak jest w Qt oznaczona strzałka w lewo szukam w google i były inne kombinacje (typu ArrowLeft) ale też nie dawały skutku

0

Uzupełnij kod o większy kontekst. W jakiej metodzie robisz te operacje?

0

Nie jestem pewny ale chyba chodziło Ci o to:

void MainWindow::keyPressEvent(QKeyEvent * event)

a tak poza to chyba nie ważne skoro inne działają a ten przycisk nie działa

0

Mam pod ręką Qt 5.1.1 i poniższy kod działa. Może problem w Twoim przypadku dotyczy tego, że inny element przechwytuje naciśnięcie strzałki. Można w takim przypadku skorzystać z filtrowania eventów.

void MainWindow::keyPressEvent( QKeyEvent* _event )
{
    if( _event->key() == Qt::Key_Left )
        qDebug() << "Left";
    else if( _event->key() == Qt::Key_A )
        qDebug() << "A";
    else
        QMainWindow::keyPressEvent( _event );
}
0

tzn. ja mam to inaczej zrobione:

void MainWindow::keyPressEvent(QKeyEvent * event)
{
    if (event->key() == Qt::Key_S ) // dół
    {   MainWindow::on_Back_clicked();   }
    else if (event->key() == Qt::Key_A)  // lewo
    {   MainWindow::on_Left_clicked();  }
}

i tak dalej i tak dalej i chcę aby S wykonywało to samo co strzałka w dół (bez tego s strzałki też nie działały)
a dokładnie to mi nie działa:

 Qt::Key_Left
0

Postaw breakpointa w keyPressEvent()
Wciśnij strzałkę w lewo
Zobacz,jaki kod zwraca event->key()

0

Problem w tym że eventu nie ma, bo klawisze są zjadane przez inne kontrolki na formie.
Dodanie this->setFocus(); w konstruktorze formy pomaga, ale tylko do czasu pierwszego kliknięcia jakiejś kontrolki.

Spróbuj coś wykombinować z eventfilter.

0

Póki nie zobaczę formy to nic więcej nie mogę powiedzieć.

0

Dziwi mnie trochę to bo odpaliłem debuggera i jak nacisnę s to reaguje a jak przycisnę strzałkę w lewo to tak jak tego by nie było....

0

Zapewne jest tak jak pisze Azarien, to jakieś buttony zjadają event'y dla strzałek, inne naciśnięcia dostajesz, bo buttony nie są nimi zainteresowane.
Moja rada to wyklinać Qt Designer by te przyciski nie chciały przejmować focus-a: focusPolicy=Qt::NoFocus

1 użytkowników online, w tym zalogowanych: 0, gości: 1