Bild laden funktioniert nicht

Alles rund um die Programmierung mit Qt
Antworten
T-Bone
Beiträge: 7
Registriert: 7. Juli 2010 12:59

Bild laden funktioniert nicht

Beitrag 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/
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag 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.
T-Bone
Beiträge: 7
Registriert: 7. Juli 2010 12:59

Beitrag 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?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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());
}
T-Bone
Beiträge: 7
Registriert: 7. Juli 2010 12:59

Beitrag 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?
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag 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.
Linux, das längste Text-Adventure aller Zeiten
T-Bone
Beiträge: 7
Registriert: 7. Juli 2010 12:59

Beitrag 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
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Könnte sein, dass das Laden im Constructor nicht geht.
Versuche es mal später im Code.
Linux, das längste Text-Adventure aller Zeiten
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Code: Alles auswählen

qDebug()  << "pruefe Datei"  << QFile::exists("paddle.png");
Wuerde das endgueltig klaeren... :wink:
T-Bone
Beiträge: 7
Registriert: 7. Juli 2010 12:59

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