QPixmap加载分段错误

时间:2015-07-02 01:40:09

标签: c++ qt

我正在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
}

1 个答案:

答案 0 :(得分:2)

最后我发现了问题所在。 问题是我需要在使用QPixmap之前使用QGuiApplication实例。

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

希望这有助于他人。 :)