Seite 1 von 1

[gelöst] Figur mit Tastatur bewegen!!

Verfasst: 5. August 2007 06:05
von oezkany
Hallo Freunde..
ich hab eine Widget, wo ich ein Rechteck ganz normal zeichnen kann.
Hab versucht, diese auch nach unten, oben, links und rechts zu bewegen.
Aber klappt nicht..

Kann mir jemand helfen??

Hier mein Quellcode:

Spielfeld.hpp

Code: Alles auswählen

#ifndef SPIELFELD_HPP
#define SPIELFELD_HPP

#include <QWidget>


class Spielfeld : public QWidget{
  Q_OBJECT
  public:
    Spielfeld(QWidget *parent = 0);

    void paintEvent(QPaintEvent *event);
    void keyPressEvent(QKeyEvent *event);

    void paintWaffe(QPainter &painter);

    int xWaffe;
    int yWaffe;
};

#endif

Spielfeld.cpp

Code: Alles auswählen

#include <QPaintEvent>
#include <QPainter>

#include "Spielfeld.hpp"

Spielfeld::Spielfeld(QWidget *parent) : QWidget(parent){
  setPalette(QPalette(QColor(250, 250, 200)));

  xWaffe = 250;
  yWaffe = 150;
}


void Spielfeld::keyPressEvent(QKeyEvent *event){
  switch (event->key()) {
    case Qt::Key_Down:
      yWaffe = yWaffe - 1;
      this->repaint();
      break;
    case Qt::Key_Up:
      yWaffe = yWaffe + 1;
      this->repaint();
      break;
    case Qt::Key_Left:
      xWaffe = xWaffe - 1;
      this->repaint();
      break;
    case Qt::Key_Right:
      xWaffe = xWaffe + 1;
      this->repaint();
      break;
    default:
      QWidget::keyPressEvent(event);
  }
}


void Spielfeld::paintEvent(QPaintEvent *){
  QPainter painter(this);
  paintWaffe(painter);
}


void Spielfeld::paintWaffe(QPainter &painter){
  painter.setPen(Qt::NoPen);
  painter.setBrush(Qt::black);

  QRect result(0, 0, 20, 20);
  result.moveCenter(QPoint(xWaffe, yWaffe));

  painter.drawRect(result);
}
Danke für eure Hilfe...

Verfasst: 5. August 2007 09:57
von oezkany
Hi Leute...
ich hatte als Hauptfenster ein QMainWindow, wo ich dann dieses obige Widget eingefügt habe. So hatte es nicht funktioniert.

Als ich nur die Widget und eine main ausprobiert hatte funktionierte das ganze. Der obige Quelltext ist schon richtig, jedoch funktioniert es nicht, wenn ich es in QMainWindow integrieren will.

Warum??
Kann mir da jmd 'nen tip geben???

Danke im Voraus...

Verfasst: 5. August 2007 10:17
von Volker
Evtl. weil der Keyboardfokus auf dem QMainWindow liegt und deshalb deine keypressEvent nicht aufgerufen wird (übrigens ist die Methode in der Basisklasse protected und nicht public).

Vielleicht hilft dir ja QWidget::grabKeyboard() weiter

Verfasst: 5. August 2007 10:32
von oezkany
wo schreib ich denn diese funktion QWidget::grabKeyboard() genau hin??

Verfasst: 5. August 2007 10:49
von oezkany
Aja, ich habs...

einfach im konstruktor von QMainWindow folgendes tun:

Code: Alles auswählen

Spielfeld *spielFeld = new Spielfeld;
spielFeld->setFocus();
Danke Volker für den Tip mit dem FOCUS.