【问题标题】:Why does my QPainter instance only draw when I use a specific .png?为什么我的 QPainter 实例仅在我使用特定的 .png 时才绘制?
【发布时间】:2012-10-10 08:31:54
【问题描述】:

我正在使用 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() 函数并且没有任何变化,所以我认为这与我如何实现我的动作无关。关于我可能遗漏的任何想法?

【问题讨论】:

  • 可能是某种文件复制问题。尝试使用图像的绝对路径。您也可以使用 Qt 资源系统而不是单独的图像文件。
  • 你是对的。这可能是一个文件复制问题,因为使用 Qt 资源有效。谢谢!

标签: qt qpainter qimage


【解决方案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,您仍然会收到错误,则错误在其他地方。那么它可以帮助我们提供更多关于如何使用图像的代码。

【讨论】:

  • 谢谢,这帮助我发现它实际上并没有加载。这些图像都使用相同的图像编辑器调整大小,然后放在相同的位置。使用 Qt 资源虽然有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
相关资源
最近更新 更多