Problem med events i Qt [LÖST]
Postat: 11 maj 2010, 22:42
Jag tror snart att jag blir fullständigt galen för jag kan verkligen inte hitta vad jag gör för fel. Jag håller på och lär mig koda Qt och tänkte då sätta ihop en egen version av Pong för att lära mig. Nu har jag kört fast och får inte programmet att reagera på events fast jag har gjort precis som i ett exempel till ett annat program.
Följande två filer är de intressanta:
game.h
game.cpp
Den skriver inte ut debug outputen "Tryck" och "Släpp" så den går ju inte in i metoderna överhuvudtaget. 
Följande två filer är de intressanta:
game.h
Kod: Markera allt
#ifndef GAME_H
#define GAME_H
#include <QList>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimer>
#include <QKeyEvent>
#include "physicalobject.h"
#include "player.h"
class Game : public QWidget
{
Q_OBJECT
public:
Game(QWidget *parent = 0);
void startGame();
protected:
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
private:
Player * currentPlayer;
QList<PhysicalObject *> * physicalObjects;
QList<Player *> * players;
QGraphicsScene scene;
QGraphicsView view;
QTimer timer;
private slots:
void advanceGame();
};
#endif
Kod: Markera allt
#include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimer>
#include <QObject>
#include <QKeyEvent>
#include <iostream>
#include "game.h"
#include "physicalobject.h"
Game::Game(QWidget *parent) : QWidget(parent)
{
scene.setSceneRect(0, 0, 600, 400);
scene.setItemIndexMethod(QGraphicsScene::NoIndex);
physicalObjects = new QList<PhysicalObject *>;
//Testobjekt
physicalObjects->append(new PhysicalObject(600, 10, 0, 0, true, 0, 0)); //Övre kant
physicalObjects->append(new PhysicalObject(600, 10, 0, 0, true, 0, 390)); //Undre kant
physicalObjects->append(new PhysicalObject(10, 380, 0, 0, true, 0, 10)); //Vänster kant
physicalObjects->append(new PhysicalObject(10, 380, 0, 0, true, 590, 10)); //Höger kant
physicalObjects->append(new PhysicalObject(20, 20, 1, 1, true, 300, 200)); //Boll
physicalObjects->append(new PhysicalObject(20, 50, 0, 0, true, 400, 200)); //Paddle
currentPlayer = new Player(physicalObjects->at(4), physicalObjects->at(5), physicalObjects->at(0));
foreach (PhysicalObject *current, *physicalObjects)
{
scene.addItem(current);
}
view.setScene(&scene);
view.setRenderHint(QPainter::Antialiasing);
view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
view.setDragMode(QGraphicsView::ScrollHandDrag);
view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Pong"));
view.resize(620, 420);
view.show();
QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(advanceGame()));
}
void Game::advanceGame()
{
scene.advance();
}
void Game::startGame()
{
timer.start(10);
}
void Game::keyPressEvent(QKeyEvent *event)
{
std::cout << "Tryck\n";
switch (event->key())
{
case Qt::Key_Up:
currentPlayer->paddle->setSpeedY(-1);
break;
case Qt::Key_Down:
currentPlayer->paddle->setSpeedY(1);
break;
default:
QWidget::keyPressEvent(event);
}
}
void Game::keyReleaseEvent (QKeyEvent *event)
{
std::cout << "Släpp\n";
switch (event->key())
{
case Qt::Key_Up:
case Qt::Key_Down:
currentPlayer->paddle->setSpeedY(0);
break;
default:
QWidget::keyReleaseEvent(event);
}
}
