我正在尝试使用控制台应用程序来读取图像中的像素:
#include <QtCore/QCoreApplication>
#include <QtGui/QImage>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QImage *img = new QImage("adadad.jpg");
//std::cout << "Type filename:" << std::endl;
img->isNull();
return a.exec();
}
这不起作用我得到了:(IT不编译,但无论如何文件还不存在......)
File not found: tmp/obj/debug_shared/main.o:: In function `main':
发生了什么事?是否无法在控制台应用程序中使用Qimage?
修改 screen
答案 0 :(得分:6)
可以在控制台应用程序中使用QImage,但必须确保已配置QtGui。如果您选择了控制台应用程序,则.pro文件可能包含类似
的内容CONFIG += console
QT -= gui
如果是这种情况,请删除QT - = gui line。
答案 1 :(得分:0)
img-&gt; isNull()不会对它自己做任何事情,请尝试这样做:
if(img->isNull())
std::cout << "Image isNull!\n";
else
std::cout << "Image loaded\n";
我的猜测是可执行文件的本地目录与该图像的位置不同,因此Qt无法找到该文件。尝试指定完整路径。
编辑:啊......没意识到这是编译问题。这看起来很像moc问题。你使用什么构建系统?你能确认moc步骤正在执行吗?答案 2 :(得分:0)
QImage("adadad.jpg");
可能会在您应用程序的当前工作目录中查找名为adadad.jpg
的文件。检查该文件是否存在。否则,请使用完全限定的路径。
答案 3 :(得分:-1)
如果在运行应用程序时当前工作目录中存在有效的映像文件,则此代码修改将按预期编译并运行。它将显示Image loaded
#include <QtGui/QImage>
#include <iostream>
int main(int argc, char *argv[])
{
QImage *img = new QImage("adadad.jpg");
if(img->isNull())
std::cout << "Image is null";
else
std::cout << "Image loaded";
return 0;
}
您不需要创建QCoreApplication的实例,除非您已将其子类化并将您的程序代码放在该子类中。
<强>更新强> 您的程序不会退出,因此您可能会收到编译错误,因为它无法替换可执行文件,因为它仍在运行(并已锁定)。文件锁定更可能是Windows下的一个问题。
答案 4 :(得分:-1)
在代码中直接使用"adadad.jpg"
加载文件时的重要注意事项。即使您将文件放在debug / release文件夹中,如果以这种方式加载,QImage也将始终为null。
我昨天遇到了这个问题,我使用Qt库来修复它,以获得完整路径:QCoreApplication::applicationDirPath()
。
实现这一目标有两种方法,第一种方法是创建img对象。
QImage img( QCoreApplication::applicationDirPath() + "adadad.jpg");
if( img.isNull())
{
qDebug() << "Loading Error - file: adadad.jpg.";
return false;
}
或使用加载功能
QImage img;
if( !img.load(QCoreApplication::applicationDirPath() + "adadad.jpg"))
{
qDebug() << "Loading Error - file: adadad.jpg.";
return false;
}