QImage - (nie)wspierane formaty plików graficznych

0

Witam.

Mam problem z wczytywaniem zdjęć w formacie *.jpg. Z pomocą metody QImageReader::supportedImageFormats() wypisuję sobie obsługiwane formaty plików graficznych. Wynik:

  • kiedy uruchamiam program poprzez QtCreatora pliki .jpg są obsługiwane,
  • natomiast kiedy uruchamiam program samodzielnie, bez środowiska, już nie są.

Próbowałem dołączyć do pliku .pro linijkę:

QTPLUGIN     += qjpeg

i później w main:

Q_IMPORT_PLUGIN(qjpeg)

jednak dało to tylko i wyłącznie błąd w kompilacji o treści:

cannot find -lqjpegd

To samo dzieje się zarówno w debug jak i w release.

Czy ktoś wie co na to poradzić? Z góry dziękuję za pomoc. :)

0

spróbuj:QT_PLUGIN_PATH += sciezka_do_plugina

dodaj sobie w kodzie:

    qDebug() << "Writer:" << QImageWriter::supportedImageFormats() << "\n";
    qDebug() << "Reader:" << QImageReader::supportedImageFormats();

żeby wiedzieć czy zadziała.

0
MarekR22 napisał(a):

spróbuj:QT_PLUGIN_PATH += sciezka_do_plugina

Dodałem to najpierw do pliku .pro ale to nic nie dało. Potem Wujek Google powiedział mi, że muszę dodać zmienną środowiskową o tej nazwie i wartości będącej tą ścieżką. To niestety też nic nie zmieniło (nawet po ponownym uruchomieniu komputera).

Mam dwie wersje Qt: 4.7.4 i 4.8.1. W wersji 4.7, w folderze plugins/imageformats znajdują się pliki: libqjpeg4.a oraz qjpeg4.dll, natomiast w 4.8 jest tylko dll-ka. Po zmianie nazwy z libqjpeg4.a na libqjpeg.a (bez czwórki) zmienił się błąd kompilacji na:

undefined reference to `qt_plugin_instance_qjpeg()'

Wydaje mi się, że skoro w wersji 4.8 nie ma już statycznych bibliotek, powinno się używać tylko tych dynamicznych. Tylko w jaki sposób? Nie znalazłem nic co by rozwiązało problem. Wrzucenie qjpeg4.dll do tego samego folderu, co plik wykonywalny nic nie dało. Użycie QCoreApplication::addLibraryPath też nie.

Dlaczego program uruchamiany poprzez środowisko wie, że ma użyć pluginów z danej lokalizacji, natomiast program uruchamiany samodzielnie już tego nie wie i jak to zmienić?

0

na dole tej strony są jakieś sugestie jak rozwiązać różne problemy, zresztą najlepiej jak przeczytasz całość.

0

Znalazłem rozwiązanie problemu TUTAJ. Trzeba było jawnie wczytać odpowiednie DLL-ki. Na szczęście, wystarczyło tylko skopiować podany na stronie kod, bez potrzeby kombinowania z plikami MVS.

0

Eee,się tam Tomku chromolisz...weź w folderze gdzie masz .exe zrób drzewko \plugins\imageformats,do tego imageformats skopiuj qjpeg4.dll,i tyle,a nie jakieś cudowania.
Inna opcja to zrobić QApplication::addLibraryPath() i zapodać lokalizację exeka - wówczas qjpeg4.dll musi być w tym samym folderze.

0

przyznaj się na jakim systemie masz problem. Gdzieś chyba czytałem, że te problemy są na Win7 i do naprawienia trzeba przygotować odpowiedni manifest.

0

Windows XP Home Edition. Na tej stronie, na której znalazłem rozwiązanie było coś napisane o manifeście, ale tak jak wspomniałem nie musiałem nic takiego robić. Wystarczyło tylko skopiować kod źródłowy.

Przy okazji, mam pytanie dosyć silnie, moim zdaniem, związane z tematem. Zawsze kiedy próbowałem uruchomić program skompilowany w trybie release przez środowisko (ot! proste Ctrl+R), program się wysypywał zaraz na wejściu. Nawet kod:

#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    return app.exec();
}

nie działał... Kiedy skopiowałem program do folderu z DLL-kami z Qt, działał.

O dziwo, kod:

int main(int argc, char *argv[]) {
    return 0;
}

uruchamiał się przez środowisko.

Do testów programu używałem tylko budowania w trybie release (Ctrl+B), środowisko nie uruchamiało skompilowanej aplikacji. Tym razem, dla wygody, wkleiłem biblioteki do folderu, w którym program się kompiluje. W pewnym momencie przez przypadek wcisnąłem Ctrl+R kiedy miałem ustawiony tryb relese. I co? Działa. W folderze z plikiem wykonywalnym była biblioteka QtCore4.dll, co spowodowało, że środowisko zaczęło prawidłowo uruchamiać aplikację.

Sytuacja odwrotna, wtedy program nie potrafił wyszukać odpowiedniej biblioteki, teraz znów środowisko. Szczerze mówiąc, mimo to, że obie kwestie są już rozwiązane, ciągle mnie irytują (zwłaszcza, że ta druga została rozwiązana, w dosyć dużej mierze, przez przypadek). :D

0

Hmm...a masz ustawioną scieżkę do kutowskiego bin w PATH?
Mi się sypało,jak uruchamiałem poza IDE a zapomniałem ww zmienną ustawić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1