Seite 1 von 1

Bild laden funktioniert nicht

Verfasst: 12. Juli 2010 11:32
von T-Bone
Guten Morgen.
Bin immer noch fleissig dabei zu lernen.
Hab ein Breakout Spiel (Das mit dem Ball und dem Schläger am unteren Rand und den Blöcken oben die man mit dem Ball treffen muss) Tutorial gefunden , versuch aber möglichst allein zu probieren.

So fing ich nun an mich an den Paddel zu machen.
Den Aufbau der Klassen habe ich aus dem Tutorial übernommen.

Dafür hab ich ein Bild vorbereitet im png Format

Das sind die Funktionen der Breakout Klasse

Code: Alles auswählen


Breakout::Breakout(QWidget *parent)
    : QWidget(parent)
{
    paddle = new Paddle();

}

void Breakout::timerEvent(QTimerEvent *event)
{

  repaint();
}


void Breakout::startGame()
{
    timerId = startTimer(10);
}

void Breakout::paintEvent(QPaintEvent *event)
{
  QPainter painter(this);

  painter.drawLine(10,10,50,90);

  painter.drawImage(paddle->getRect(),
  paddle->getImage());



}
drawLine habe ich zum Testen hinzugefügt und es wird auch eine Linie gezeichnet.
Das Bild für den Paddel wird aber nicht gezeichnet.

Code: Alles auswählen


Paddle::Paddle()
{
  image.load("paddle.png");


  rect = image.rect();
  resetState();
}

void Paddle::resetState()
{
  rect.moveTo(10, 10);
}

QRect Paddle::getRect()
{
  return rect;
}

QImage & Paddle::getImage()
{
  return image;
}
paddle.png befindet sich im Verzeichnis in dem auch die main.cpp Datei
ist und ich habe sie im Debug Release Ordner ebenfalls kopiert.

Mache ich einen offensichtlichen Fehler?

Ich hoffe ihr könnt mir helfen bei dem Problem.

Das Tutorial ist hier zu finden: http://zetcode.com/tutorials/qt4tutorial/breakoutgame/

Verfasst: 12. Juli 2010 11:43
von kater
Bau doch noch was ein, was überprüft, ob das Bild wirklich geladen wurde. Dann geb dir auch rect mal aus, damit du weisst was drinne steht. Vllt. wird das Bild ja im Nirvana gezeichnet.

Verfasst: 12. Juli 2010 11:58
von T-Bone
Die load Funktion gibt bei Erfolg true zurück nur hab ich
bis Dato nichts gefunden das mir eine Meldung ausgibt wie alert in Javascript.

Hast du da einen Tipp für mich?

Verfasst: 12. Juli 2010 12:42
von solarix

Code: Alles auswählen

#include <QDebug>
und danach z.B.

Code: Alles auswählen

Paddle::Paddle()
{
  qDebug() << "Paddle::Paddle()" << image.load("paddle.png");
  rect = image.rect();
  resetState();
} 

...
void Breakout::paintEvent(QPaintEvent *event)
{
  qDebug() << "Breakout::paintEvent";
  QPainter painter(this);

  painter.drawLine(10,10,50,90);

  qDebug()  << paddle->getRect() ;
  painter.drawImage(paddle->getRect(),
  paddle->getImage());
}

Verfasst: 12. Juli 2010 13:06
von T-Bone
Danke für die Hilfestellung. Jetz weiss kann ich ja gucken wie man das
richtig benutzt.

Hab die Zeilen so eingefügt und als Ergebnis bekomme ich

Paddle::Paddle() false
Breakout::paintEvent
QRect(10,10 0x0)


Heisst wohl das das Bild nicht geladen wird.
Nur woran liegt das?

Ist doch richtig wenn ich paddle.png im selben Ordner kopiere in dem die main.cpp gespeichert ist oder nicht?

Verfasst: 12. Juli 2010 13:24
von RavenIV
T-Bone hat geschrieben: Ist doch richtig wenn ich paddle.png im selben Ordner kopiere in dem die main.cpp gespeichert ist oder nicht?
Nein.
Das Bild muss da hin, wo auch die exe liegt.
Also entweder in den "Debug"- oder "Release"-Ordner.
Oder besser ein "image"-Ordner unterhalb der beiden Ordner.

Verfasst: 12. Juli 2010 13:29
von T-Bone
Es ist sowohl im Verzeichniss wie die main.cpp als auch im Debug Ordner in dem sich die exe befindet.

Grad nochmal extra geprüft

Verfasst: 12. Juli 2010 13:32
von RavenIV
Könnte sein, dass das Laden im Constructor nicht geht.
Versuche es mal später im Code.

Verfasst: 12. Juli 2010 14:24
von solarix

Code: Alles auswählen

qDebug()  << "pruefe Datei"  << QFile::exists("paddle.png");
Wuerde das endgueltig klaeren... :wink:

Verfasst: 12. Juli 2010 22:02
von T-Bone
Danke , hab jetz den Fehler gefunden.

Tatsächlich hat er die Datei nicht gefunden im Ordner in dem sich die .exe befindet.

Es muss in den davor liegenden Ordner

../workspace/brick
-debug
- release
paddle.png

Wer kommt denn auf sowas :D

Vielen dank für die Hilfe

Find es übrigens sehr angenehm hier.
Scheint ein vernünftiges Board zu sein , da hab ich schon ganz
andere Sachen erlebt

Schönen Abend wünsch ich.