• 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

VPS Starter Arubacloud
0 głosów
704 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,370 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,370 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,370 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,370 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ź 549 wizyt
0 głosów
2 odpowiedzi 182 wizyt
pytanie zadane 27 października 2019 w C i C++ przez Vakiz Nowicjusz (190 p.)
–1 głos
1 odpowiedź 161 wizyt
pytanie zadane 24 kwietnia 2017 w C i C++ przez niezalogowany

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...