Qt klawisze strzałek nie działają

Qt klawisze strzałek nie działają
liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
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:

Kopiuj
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:

Kopiuj
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

HO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
0

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

liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
0

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

Kopiuj
void MainWindow::keyPressEvent(QKeyEvent * event)

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

HO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
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.

Kopiuj
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 );
}
liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
0

tzn. ja mam to inaczej zrobione:

Kopiuj
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:

Kopiuj
 Qt::Key_Left
MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

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

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
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.

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

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

liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
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....

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.