Problem bei KeyPressEvent

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Sebleb
Beiträge: 15
Registriert: 17. Juli 2011 19:17

Problem bei KeyPressEvent

Beitrag von Sebleb »

Hallo zusammen!

ich bin ein qt-änfanger und habe eben mein erste Programm zum Laufen gekrieget .
ich habe ein Sinusfunktion geplottet und hat wunderbar geklappt aber ich hab noch
ein Problem die Window zuschließen. ich versucht mit Hilfe der Methode KeyPressEvent
das Qwidget zu schließen wenn ich Esc-taste drücke :
hier sind Abschnitte von meinem Code

parser.h

Code: Alles auswählen

class Parser: public QWidget{       
  
 public:
  
  Parser(int n, QWidget *p=NULL,Qt::WindowFlags f=0);
  void setValue( const std::vector<xyvalues> &v);   

 protected:
  
  virtual void paintEvent( QPaintEvent *ev);
  virtual void KeyPressEvent( QKeyEvent *event);
parser.cpp

Code: Alles auswählen


void Parser::KeyPressEvent(QKeyEvent* event){
  
  if(event ->  Key()== Qt::Key_Escape)
    {
      event->accept();
      close();
    }
  else{
    Parser::KeyPressEvent(event);
  }
}
main.cpp

Code: Alles auswählen

QApplication myapp(argc, argv);
 xyvalues v;
 Parser* pWindow = new Parser (psize);
  pWindow->resize(psize,psize);
  for(i=0; i<=psize-1; i++){
   v.x= i*0.01;
   v.y= sin(v.x);
   pWindow->setValue(i, v);
 }
  pWindow->show();
  return myapp.exec();

}
Compilermeldung:

Code: Alles auswählen

 error: invalid use of incomplete type ‘struct QKeyEvent’
/usr/include/qt4/QtGui/qwidget.h:79:7: error: forward declaration of ‘struct QKeyEvent’
parser.cpp:549:12: error: invalid use of incomplete type ‘struct QKeyEvent’
/usr/include/qt4/QtGui/qwidget.h:79:7: error: forward declaration of ‘struct QKeyEvent’
ich bin für jeder Hilfe sehr Dankbare

Gruß
seb
cpp_asm
Beiträge: 5
Registriert: 10. August 2011 16:15

Re: Problem bei KeyPressEvent

Beitrag von cpp_asm »

Versuch es mal mit keyPressEvent und nicht KeyPressEvent.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Problem bei KeyPressEvent

Beitrag von Christian81 »

Des weiteren fehlt ein include von QKeyEvent und Du hast eine Rekursion in der keyPressEvent() - Funktion -> C++ Grundlagen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Problem bei KeyPressEvent

Beitrag von franzf »

Ein #include <QKeyEvent> wäre auch nicht schlecht (jedenfalls schlägt das der Compiler vor).
Sebleb
Beiträge: 15
Registriert: 17. Juli 2011 19:17

Re: Problem bei KeyPressEvent

Beitrag von Sebleb »

ich habe es mit #include <QKeyEvent> includet aber es meldet mir folgendes

15: error: ‘class QKeyEvent’ has no member named ‘Key’
cpp_asm
Beiträge: 5
Registriert: 10. August 2011 16:15

Re: Problem bei KeyPressEvent

Beitrag von cpp_asm »

Benutz event->key()
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Re: Problem bei KeyPressEvent

Beitrag von Exasperation »

Da du sie anscheinend nicht kennst, sei dir die Doku empfohlen.
Auf 75% aller hier gestellten Fragen, gibt es dort mit richtigem Lesen die Antwort.
Sebleb
Beiträge: 15
Registriert: 17. Juli 2011 19:17

Re: Problem bei KeyPressEvent

Beitrag von Sebleb »

habe #include <qkeyevent.h> zu Header zugefügt; der Compler meledt zwar kein Fehler mehr aber das fenster schließt nicht wenn ich Esc -taste drück und habe parser.cpp so gändert:

Code: Alles auswählen

void Parser::KeyPressEvent(QKeyEvent* event){
  
  if(event->key()== Qt::Key_Escape)
    {
      event->accept();
      close();

    }
  else{
    // Parser::KeyPressEvent(event);
     KeyPressEvent(event);
  }
   }

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Problem bei KeyPressEvent

Beitrag von Christian81 »

Die Funktion die Du überladen sollst heisst ja auch keyPressEvent() - sehe Doku.
Abgesehen davon hast Du immer noch die Rekursion drin...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Sebleb
Beiträge: 15
Registriert: 17. Juli 2011 19:17

Re: Problem bei KeyPressEvent

Beitrag von Sebleb »

Der Compiler findet die Methode keyPressEvent() nicht
void Parser::keyPressEvent(QKeyEvent* event){
 
  if(event->key()== Qt::Key_Escape)
    {
      event->accept();
      close();

    }
  else{
   
     keyPressEvent();
  }
   }

Comilermeldung

Code: Alles auswählen

:20: error: no matching function for call to ‘Parser::keyPressEvent()’

kannst du mir vieleich sagen wie ich das endlose schleife beheben kann
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Problem bei KeyPressEvent

Beitrag von franzf »

Die Funktion heißt halt keyPressEvent, du implementierst da immer noch eine Parser::KeyPressEvent (C++ ist Case-Sensitive!)
Weißt du denn auch, was eine Rekursion ist? Sonst hätte sich die Frage nach deren Behebung gar nicht gestellt...
Sebleb
Beiträge: 15
Registriert: 17. Juli 2011 19:17

Re: Problem bei KeyPressEvent

Beitrag von Sebleb »

es hat jetzt geklappt aber anscheined das Prgramm lauft immer in Hintergrund;
zwar wenn ich die Ecs drücke ,schließt das fenseter aber das Programm bleibt irgenwo immer noch hängen

Code: Alles auswählen

void Parser::keyPressEvent(QKeyEvent* event){
  
  if(event->key()== Qt::Key_Escape)
    {
      event->accept();
      close();

    }
  else{
   
    QWidget::keyPressEvent(event);
  }
}
Sebleb
Beiträge: 15
Registriert: 17. Juli 2011 19:17

Re: Problem bei KeyPressEvent

Beitrag von Sebleb »

sorry es hat geklappt;

Danke sehr
Antworten