我正在开发一个项目,使用Qt 4.8.3作为ARM平台。在我的项目中,我使用了QGraphicsItems
......其中之一是QGraphicsPixmapItem
的一个子类。QPixmap :: load()crash - 试图避免它
该代码已用32位位图图像进行测试 - 并且崩溃。
不仅在ARM上运行崩溃,而且在QVFB中运行。
QPixmap p;
if (!p.load(filename)) // crashes here
return false;
我试图用try ... catch来包围它,但它没有帮助。
我似乎无法步入此版本的Qt代码......但崩溃发生在QImageReader::read(QImage*)
内部。
堆栈跟踪:
QImageReader::read(QImage*)
QImageReader::read()
QPixmapData::fromFile(QString const&*, QFlags<QT::ImageConversionFlag>)
QPixmap::load(QString const&, char const*, QFlags<QT::ImageConversionFlag>)
QPixmapItem::loadItemFromFile // mine, the code above
任何其他类型的图像作品...和相同的32位位图正确加载在Windows中,同样的Qt版本。它无法加载(返回false)在相同的Qt版本,为桌面。
我很乐意排除这种类型的文件 - 但我不知道如何。
有没有什么办法来检查图像类型而不加载图像并避免崩溃?
有没有办法可能只加载图像头,并验证其类型?
尝试将图像格式和ImageConversionFlags的各种组合作为参数进行调用。 –
@MichaelO。我试图尝试...但我必须能够读取所有类型的图像文件,不能限制为单一类型。设置除“BMP”之外的任何内容都会返回false - 因为在尝试读取之前图像类型可能会失败 - 但我必须能够读取位图和其他所有类型的文件。我只想排除32位位图。 – Thalia