QT C ++的新手问题 - Qimage不起作用?

时间:2010-08-29 19:32:17

标签: c++ qt qt-creator

我正在尝试使用控制台应用程序来读取图像中的像素:

#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

5 个答案:

答案 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;
}