[gelöst] Figur mit Tastatur bewegen!!

Alles rund um die Programmierung mit Qt
Antworten
oezkany
Beiträge: 4
Registriert: 25. Juli 2007 23:39

[gelöst] Figur mit Tastatur bewegen!!

Beitrag 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...
Zuletzt geändert von oezkany am 5. August 2007 10:49, insgesamt 1-mal geändert.
oezkany
Beiträge: 4
Registriert: 25. Juli 2007 23:39

Beitrag 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...
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
oezkany
Beiträge: 4
Registriert: 25. Juli 2007 23:39

Beitrag von oezkany »

wo schreib ich denn diese funktion QWidget::grabKeyboard() genau hin??
oezkany
Beiträge: 4
Registriert: 25. Juli 2007 23:39

Beitrag 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.
Antworten