【问题标题】:QPixmap load segmentation faultQPixmap 加载分段错误
【发布时间】:2015-07-02 01:40:09
【问题描述】:

我正在 Windows 7 上创建 Qt 控制台应用程序。我使用的是 Qt 5.3。 目前我有错误让我感到沮丧。 已经检查了 stackoverflow,但没有任何答案可以帮助我。

我的问题是在创建 Qpixmap 时出现错误分段错误,并且我没有任何其他错误信息。

这是我的代码:

QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
    qWarning() << "Error : file " << filePath << " does not exist";
    return false;
}

QImageReader imageReader(filePath);
QImage mainImage = imageReader.read();
if(mainImage.isNull())
{
    qWarning() << "Error read image : " << filePath;
    qWarning() << imageReader.errorString();
    return false;
}
QPixmap mainPixmap(QPixmap::fromImage(mainImage)); // Segmentation fault here

在我的机器上生成分段错误错误的代码的最后一行。 有什么办法可以调试这个错误吗?

更新: 我在 QPixmap 上有一些代码,但它导致了同样的分段错误。

代码 1:

QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
    qWarning() << "Error : file " << filePath << " does not exist";
    return false;
}

QImageReader imageReader(filePath);
QImage mainImage = imageReader.read();
if(mainImage.isNull())
{
    qWarning() << "Error read image : " << filePath;
    qWarning() << imageReader.errorString();
    return false;
}    
QPixmap mainPixmap;
mainPixmap = QPixmap::fromImage(mainImage); // segmentation fault here

代码 2:

QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
    qWarning() << "Error : file " << filePath << " does not exist";
    return false;
}
QPixmap mainPixmap;
mainPixmap.load(filePath); // segmentation fault here

代码 3:

QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
    qWarning() << "Error : file " << filePath << " does not exist";
    return false;
}
QPixmap mainPixmap;
if(_file.open(QFile::ReadOnly))
{
    mainPixmap.loadFromData(_file.readAll()); //segmentation fault here
}

【问题讨论】:

  • QPixmap::fromImage(mainImage) 移到单独的行,以便您可以尝试确定是该代码还是QPixmap 构造函数。
  • 嗯,奇怪,也许图像在某些方面已损坏或无效。您使用的是 Qt 库的调试版本吗?你有崩溃发生时的调用堆栈吗?
  • 尝试指定文件格式
  • @sam :图像正常,如果第一个代码损坏,则 mainImage 应该为空,但不是。我检查 png 文件在使用其他应用程序打开时没有问题。调用堆栈在分段故障线处停止。 t3ft3l : 已经测试过了,但还是有同样的问题。

标签: c++ qt


【解决方案1】:

我终于弄清楚了问题所在。 问题是在使用 QPixmap 之前我需要有 QGuiApplication 实例。

在控制台应用程序上,我通常将 QCoreApplication 作为根 QApplication,但是当我们要使用 QPixmap 时,我们需要将其更改为 main.cpp 上的 QGuiApplication。

希望这对其他人有所帮助。 :)

【讨论】:

  • 感谢您的更新。我原以为会有关于此要求的断言或错误消息。也许下次尝试使用调试库运行。下次还要发布调用堆栈;它可以帮助调试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2011-03-17
相关资源
最近更新 更多