Проблема новичка с QT C ++ - Qimage не работает? - PullRequest
4 голосов
/ 29 августа 2010

Я пытаюсь создать консольное приложение для чтения пикселей с изображения:

#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();
}

Это не сработало. Я получил: (ЭТО не компилируется, но в любом случае файл не существуетпока ...)

File not found: tmp/obj/debug_shared/main.o:: In function `main':

Что происходит?Разве нельзя использовать Qimage с консольным приложением?!

РЕДАКТИРОВАТЬ: экран

Ответы [ 5 ]

6 голосов
/ 30 августа 2010

Можно использовать QImage в консольном приложении, однако вы должны убедиться, что QtGui настроен.Если вы выбрали консольное приложение, ваш .pro-файл может содержать что-то вроде

CONFIG += console
QT -= gui

В этом случае удалите строку QT - = gui.

0 голосов
/ 19 октября 2012

Важное замечание при загрузке файла с использованием "adadad.jpg" в вашем коде.Даже если вы поместите файл в папку отладки / выпуска, QImage всегда будет нулевым, если загрузится таким образом.

Я столкнулся с этой проблемой вчера и исправил ее, используя библиотеку 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;
} 
0 голосов
/ 29 августа 2010
QImage("adadad.jpg");

Вероятно будет искать файл с именем adadad.jpg в текущем рабочем каталоге вашего приложения.Проверьте, присутствует ли этот файл.В противном случае используйте полный путь.

0 голосов
/ 30 августа 2010

Эта модификация вашего кода будет скомпилирована и запущена в соответствии с ожиданиями, если при запуске приложения в текущем рабочем каталоге будет допустимый файл изображения. Будет отображаться 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.

0 голосов
/ 29 августа 2010

img-> isNull () ничего не делает самостоятельно, попробуйте вместо этого:

if(img->isNull())
    std::cout << "Image isNull!\n";
else
    std::cout << "Image loaded\n";

Я предполагаю, что локальный каталог исполняемого файла не совпадает с расположением этого образа, поэтому Qt не может найти файл. Попробуйте указать полный путь.

РЕДАКТИРОВАТЬ: Ааа ... не понял, что это проблема компиляции. Это выглядит подозрительно, как проблема МОК. Какую систему сборки вы используете? и можете ли вы подтвердить, что шаг moc выполняется?

...