Problem med events i Qt [LÖST]

Här diskuteras programmering och utveckling
reinfallt
Inlägg: 111
Blev medlem: 22 okt 2007, 16:11
OS: Kubuntu
Utgåva: 18.04 Bionic Beaver LTS
Ort: Ornäs/Sverige

Problem med events i Qt [LÖST]

Inlägg av reinfallt »

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

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
game.cpp

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);
  }
}
Den skriver inte ut debug outputen "Tryck" och "Släpp" så den går ju inte in i metoderna överhuvudtaget. >:(
Senast redigerad av 1 reinfallt, redigerad totalt 12 gånger.
reinfallt
Inlägg: 111
Blev medlem: 22 okt 2007, 16:11
OS: Kubuntu
Utgåva: 18.04 Bionic Beaver LTS
Ort: Ornäs/Sverige

Re: Problem med events i Qt

Inlägg av reinfallt »

Jag löste problemet :)
Skriv svar

Återgå till "Programmering och webbdesign"