• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Qt - Obsługa i konfiguracja KeyEvent

Object Storage Arubacloud
0 głosów
737 wizyt
pytanie zadane 19 sierpnia 2018 w C i C++ przez VegaOrionis Początkujący (350 p.)

Witam, chciałbym obsługiwać swój program za pomocą klawiszy z klawiatury, nie wiem jak skonfigurować aby czytał.
 

#include <QKeyEvent>

// .h :

protected:
void keypress(QKeyEvent *a);

--------------------------------------------------------------
// .cpp  :

// na szybko napisany przykładowy program:

void MainWindow::keypress(QKeyEvent *a)
{
    QString text1 = ui->label->text();
    text1 += char (a->key());
    ui->label->setText(text1);
}

// po uruchomieniu programu i naciśnięciu klawisza nic się nie dzieje, nie wiem jak skonfigurować.

 

komentarz 19 sierpnia 2018 przez j23 Mędrzec (194,920 p.)

A podpiąłeś keypress pod odpowiedni sygnał?

komentarz 19 sierpnia 2018 przez VegaOrionis Początkujący (350 p.)
odpowiedni sygnał? czyli co? mój "label"  jest wstawiony do programu i kod od nosi się  do niego ale jedno z drugim chyba się nie łączy, nie działa nie wiem czemu.  podobno trzeba jakoś skonfigurować ale nie wiem jak ;/
komentarz 19 sierpnia 2018 przez j23 Mędrzec (194,920 p.)
Dobra, z innej strony.  Patrz odpowiedź.

2 odpowiedzi

0 głosów
odpowiedź 19 sierpnia 2018 przez j23 Mędrzec (194,920 p.)

Użyj metody installEventFilter do przechwytywania zdarzeń (w tym naciśnięcia klawiszy) -> link

0 głosów
odpowiedź 20 sierpnia 2018 przez Bondrusiek Maniak (61,410 p.)

Witam,

spróbuj przeładować funkcje dla QWidget

virtual void keyPressEvent(QKeyEvent *event)

Następnie w klasie dodaj tą metodę.

#include <QKeyEvent>
 
// .h :
 
protected:
void keyPressEvent(QKeyEvent *a);

a w pliku .cpp

// .cpp  :
void MainWindow::keypress(QKeyEvent *a)
{
    QString text1 = ui->label->text();
    text1 += a->text();
    ui->label->setText(text1);
}

 

1
komentarz 20 sierpnia 2018 przez j23 Mędrzec (194,920 p.)
Ja tak zrobi, to na pewno mu nie zadziała.
komentarz 20 sierpnia 2018 przez Bondrusiek Maniak (61,410 p.)

Nie wiem, czy o to chodziło ale wydaje mi się że chce aby klikając na pewien klawisz odpowiednio dodawał się do końca etykiety. U mnie taki sposób działa

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QKeyEvent>
#include <QLabel>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
protected:
    void keyPressEvent(QKeyEvent* event);
private:
    QLabel *label;
};

#endif // WIDGET_H

.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    label = new QLabel(this);
    label->setText("123456");
    label->resize(200, 200);
    resize(200, 200);
}

Widget::~Widget()
{

}


void Widget::keyPressEvent(QKeyEvent *e)
{
    QString text = label->text();
    text += e->text();
    label->setText(text);
}

 

1
komentarz 20 sierpnia 2018 przez j23 Mędrzec (194,920 p.)

Chodziło mi o to, że w deklaracji dałeś keyPressEvent, a w definicji keypress.

komentarz 20 sierpnia 2018 przez Bondrusiek Maniak (61,410 p.)
Faktycznie, byłem w pracy i przeoczyłem to. Dzięki za info
komentarz 20 sierpnia 2018 przez VegaOrionis Początkujący (350 p.)
No faktycznie, dzięki ! jestem początkujący i byłem pewien że nazwa funkcji może być przypadkowa a nie konkretnie "keyPressEvent"  (ale wtopa xd) ale dzięki, działa mi!
1
komentarz 20 sierpnia 2018 przez Bondrusiek Maniak (61,410 p.)
@VegaOrionis luz, dobrze że próbujesz, popełniasz błędy wtedy się rozwijasz. W tym przykładzie wykorzystałem funkcje wirtualne, które są ważną częścią C++. Aby zrozumieć te zagadnienia polecam przy wolnej chwili przeczytać o dziedziczeniu

https://pl.wikibooks.org/wiki/C%2B%2B/Dziedziczenie

a następnie o funkcjach wirtualnych

https://pl.wikibooks.org/wiki/C%2B%2B/Funkcje_wirtualne

Pozdrawiam
komentarz 21 sierpnia 2018 przez VegaOrionis Początkujący (350 p.)
Dzięki!

Podobne pytania

0 głosów
1 odpowiedź 617 wizyt
0 głosów
2 odpowiedzi 201 wizyt
pytanie zadane 27 października 2019 w C i C++ przez Vakiz Nowicjusz (190 p.)
–1 głos
1 odpowiedź 168 wizyt
pytanie zadane 24 kwietnia 2017 w C i C++ przez niezalogowany

92,690 zapytań

141,603 odpowiedzi

320,099 komentarzy

62,051 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...