我正在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
}
答案 0 :(得分:2)
最后我发现了问题所在。 问题是我需要在使用QPixmap之前使用QGuiApplication实例。
在控制台应用程序上我通常将QCoreApplication作为根QApplication,但是当我们想要使用QPixmap时,我们需要将它更改为main.cpp上的QGuiApplication。
希望这有助于他人。 :)