QPixmap负载分段故障

QPixmap load segmentation fault

本文关键字:故障 分段 负载 QPixmap      更新时间:2023-10-16

我正在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之前,我需要有QGuiApplication实例。

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

希望这能帮助其他人。:(