Почему мой экземпляр QPainter рисует только тогда, когда я использую определенный .png?

Я создаю простую игру типа «лягушка» с помощью Qt Creator. Мне удалось получить плеер, который работает с 4 клавишами со стрелками, и машину, которая сама перемещается по экрану. У меня есть отдельный класс Player, Car и Frogger.

Класс Frogger рисует изображения в paintEvent:

painter.drawImage(player->getRect(), player->getImage());
painter.drawImage(car->getRect(), car->getImage());

Но столкнулся с проблемой при попытке загрузить другое изображение для машины. Если я использую image.load("player.png"); как для машины, так и для конструктора игрока, я могу видеть машину, движущуюся по экрану, как изображение игрока, и игрока, который движется в соответствии с моими клавишами.

Однако, если я заменю изображение чем-либо другим (все изображения находятся в одной папке; я также пытался добавить его в Qt Creator в разделе «Другие файлы»), например «car.png», оно не отображается. Я пробовал это с другими изображениями, но они тоже не отображаются для плеера. Любые идеи о том, почему это может произойти? Я закомментировал свою функцию autoMove(), и ничего не изменилось, поэтому я не думаю, что это связано с тем, как я реализую свой ход. Любые идеи о том, что мне может не хватать?


person glew    schedule 10.10.2012    source источник
comment
Это может быть какая-то проблема с копированием файлов. Попробуйте с абсолютным путем к изображениям. Вы также можете использовать систему ресурсов Qt вместо отдельных файлов изображений.   -  person hyde    schedule 10.10.2012
comment
Ты был прав. Вероятно, это была проблема с копированием файлов, поскольку сработало использование ресурса Qt. Благодарю вас!   -  person glew    schedule 10.10.2012


Ответы (1)


Я думаю, вы можете сократить возможные места ошибок до процедуры загрузки изображения. Попробуйте подтвердить это, проверив возвращаемое значение QImage::load:

QString path = "player.png";
bool loadSuccess = image.load(path);
qDebug() << "Image" << path << "loaded? =>" << loadSuccess;

Если это напечатает false, проверьте, может ли Qt найти точно такой же путь при простом переходе к QFile:

if(!loadSuccess)
    qDebug() << "  File exists? =>" << QFile::exists(path);

Если это напечатает true, формат изображения не может быть прочитан Qt. Возможно, вы используете нестандартную кодировку PNG. Изображения все из одного источника? (Например, отредактировано тем же графическим редактором)

Однако, если вы по-прежнему получаете ошибки, даже если первый вывод отладки выше всегда печатает true, ошибка находится где-то еще. Тогда это может помочь нам дать нам больше кода того, как вы используете изображения.

person leemes    schedule 10.10.2012
comment
Спасибо, это помогло мне понять, что на самом деле это не загружается. Все изображения были изменены в одном и том же графическом редакторе, а затем помещены в одно и то же место. Однако использование ресурса Qt сработало. - person glew; 10.10.2012