Seite 1 von 1

Problem bei KeyPressEvent

Verfasst: 10. August 2011 20:01
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

Re: Problem bei KeyPressEvent

Verfasst: 10. August 2011 20:08
von cpp_asm
Versuch es mal mit keyPressEvent und nicht KeyPressEvent.

Re: Problem bei KeyPressEvent

Verfasst: 10. August 2011 20:12
von Christian81
Des weiteren fehlt ein include von QKeyEvent und Du hast eine Rekursion in der keyPressEvent() - Funktion -> C++ Grundlagen

Re: Problem bei KeyPressEvent

Verfasst: 10. August 2011 20:12
von franzf
Ein #include <QKeyEvent> wäre auch nicht schlecht (jedenfalls schlägt das der Compiler vor).

Re: Problem bei KeyPressEvent

Verfasst: 10. August 2011 20:19
von Sebleb
ich habe es mit #include <QKeyEvent> includet aber es meldet mir folgendes

15: error: ‘class QKeyEvent’ has no member named ‘Key’

Re: Problem bei KeyPressEvent

Verfasst: 10. August 2011 20:24
von cpp_asm
Benutz event->key()

Re: Problem bei KeyPressEvent

Verfasst: 11. August 2011 07:43
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.

Re: Problem bei KeyPressEvent

Verfasst: 11. August 2011 13:56
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);
  }
   }


Re: Problem bei KeyPressEvent

Verfasst: 11. August 2011 14:59
von Christian81
Die Funktion die Du überladen sollst heisst ja auch keyPressEvent() - sehe Doku.
Abgesehen davon hast Du immer noch die Rekursion drin...

Re: Problem bei KeyPressEvent

Verfasst: 11. August 2011 15:40
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

Re: Problem bei KeyPressEvent

Verfasst: 11. August 2011 17:16
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...

Re: Problem bei KeyPressEvent

Verfasst: 11. August 2011 17:21
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);
  }
}

Re: Problem bei KeyPressEvent

Verfasst: 11. August 2011 17:31
von Sebleb
sorry es hat geklappt;

Danke sehr