Seite 1 von 2
[gelöst] jpg und gif als Pixmap in QLabel
Verfasst: 6. November 2007 21:44
von gerd87
Hallo,
ich habe versucht, ein Bild in ein QLabel darzustellen.
Leider funktioniert es nur mit PNG - Dateien.
Hier mal der Quelltext:
Code: Alles auswählen
if(edit_buch_bild->text() != ""){
QString newbildtext = edit_buch_bild->text();
QFile file(newbildtext);
if (!file.open(QIODevice::ReadWrite))
{
QMessageBox::information( this, "Info", QString("Bild konnte nicht geöffnet werden."), "&Ok" );
return;
}
QImage image(newbildtext);
edit_buch_vorschaubild->setPixmap(QPixmap::fromImage(image));
}
edit_buch_bild->text() ist hier der text in einem edit-feld.
Habe QT so compiliert:
configure -static -release -qt-sql-odbc -qt-sql-mysql -qt-sql-sqlite -qt-gif -qt-libpng -qt-libjpeg
Verfasst: 6. November 2007 22:30
von CaptnChaos
Du musst noch die Plugins für jpeg und gif laden.
Wir hatten hier schon mal so einen Thread. Such bitte mal.
Verfasst: 6. November 2007 23:56
von patrik08
Um zu sehen was geladet ist geht auch ...
QList<QByteArray> formats = QImageReader::supportedImageFormats();
wenn die Plug-in geladet ist kommt die entsprechende file ....
Code: Alles auswählen
static inline QString ImageFilterHaving()
{
QString filter;
filter = tr( "All supported Types" ) + " (";
QList<QByteArray> formats = QImageReader::supportedImageFormats();
for ( int x = 0; x < formats.count(); ++x ) {
filter += QString( "*.%1" ).arg( QString( formats[ x ] ) );
if ( x != formats.count() - 1 )
filter += " ";
}
filter += ");;";
QString filterSimple;
/*
QSvgRenderer ? Load?
#include <QtSvg>
QT += svg
*/
filterSimple += tr( "Scalable Vector Graphics" ) + " (*.svg *.svg.gz);;";
for ( int y = 0; y < formats.count(); ++y ) {
QString form( formats[ y ] );
if ( form == "bmp" )
filterSimple += tr( "Windows Bitmap" ) + " (*.bmp)";
else if ( form == "gif" )
filterSimple += tr( "Graphic Interchange Format" ) + " (*.gif)";
else if ( form == "jpeg" || form == "jpg" ) {
if ( !filterSimple.contains( form ) )
filterSimple += tr( "Joint Photographic Experts Group" ) + " (*.jpeg *.jpg)";
} else if ( form == "mng" )
filterSimple += tr( "Multiple-image Network Graphics" ) + " (*.mng)";
else if ( form == "png" )
filterSimple += tr( "Portable Network Graphics" ) + " (*.png)";
else if ( form == "pbm" || form == "ppm" ) {
if ( !filterSimple.contains( form ) )
filterSimple += tr( "Portable Bitmap" ) + " (*.pbm *.ppm)";
} else if ( form == "pgm" )
filterSimple += tr( "Portable Graymap" ) + " (*.pgm)";
else if ( form == "xbm" || form == "xpm" ) {
if ( !filterSimple.contains( form ) )
filterSimple += tr( "X11 Bitmap" ) + " (*.xbm *.xpm)";
} else if ( form == "ico" )
filterSimple += tr( "Icon Image File Format" ) + " (*.ico)";
else if ( form == "jp2" || form == "j2k" ) {
if ( !filterSimple.contains( form ) )
filterSimple += tr( "JPEG 2000" ) + " (*.jp2 *.j2k)";
} else if ( form == "tif" || form == "tiff" ) {
if ( !filterSimple.contains( form ) )
filterSimple += tr( "Tagged Image File Format" ) + " (*.tif *.tiff)";
} else
filterSimple += tr( "Unknown Format" ) + QString( " (*.%1)" ).arg( form );
if ( y != formats.count() - 1 && !filterSimple.endsWith( ";;" ) )
filterSimple += ";;";
}
filterSimple = filterSimple.left( filterSimple.length() - 2 );
filter += filterSimple;
return filter;
}
static inline QPixmap RenderPixmapFromSvgByte( QByteArray streams ) /* svg file read:all */
{
QSvgRenderer svgRenderer( streams );
QPixmap pix( svgRenderer.defaultSize() );
pix.fill(Qt::transparent);
QPainter paint(&pix);
svgRenderer.render(&paint);
return pix;
}
/* die file image typen sehen... */
QString file = QFileDialog::getOpenFileName( this, tr( "Choose Image to insert..." ), QString(setter.value("LastDir").toString()) , ImageFilterHaving() );
Verfasst: 7. November 2007 01:11
von gerd87
Danke für die Antworten.
Habe hier im Forum einiges gefunden, funktionieren will es aber noch nicht.
meine .pro - Datei:
Code: Alles auswählen
TARGET =
DEPENDPATH = .
INCLUDEPATH = .
QT += sql \
qt3support \
opengl
HEADERS = mainform.h
FORMS = mainform.ui
SOURCES = main.cpp \
mainform.cpp
RESOURCES = application.qrc
RC_FILE = RCFile.rc
TEMPLATE = app
CONFIG += release \
static
QTPLUGIN += qjpeg
meine main.cpp:
Code: Alles auswählen
#include <QApplication>
#include "mainform.h"
#include <QtPlugin>
Q_IMPORT_PLUGIN(qjpeg)
int main( int argc, char** argv )
{
QApplication app( argc, argv );
MainForm mainForm;
mainForm.show();
return( app.exec() );
}
Ich bekomme folgende Fehlermeldung:
release\main.o(.text+0x4b9):main.cpp: undefined reference to `qt_plugin_instance_qjpeg()'
Habe ich da noch was vergessen?
Verfasst: 7. November 2007 07:25
von CaptnChaos
Musst du meines Wissens nur machen wenn Qt statisch gelinkt ist.
Verfasst: 7. November 2007 16:49
von gerd87
Habe QT so compiliert (so):
configure -static -release -qt-sql-odbc -qt-sql-mysql -qt-sql-sqlite -qt-gif -qt-libpng -qt-libjpeg
Dann ist das doch statisch?
Verfasst: 7. November 2007 17:06
von CaptnChaos
Benutzt du Windows oder Linux?
Unter Windows musst du Qt komplett neu kompilieren, damit du statisch linken kannst. Dann geht aber kein dynamisches linken mehr....
Unter Linux wird das dann statisch gelinkt, das ist richtig.
Verfasst: 7. November 2007 21:04
von gerd87
Ich benutze Windows XP.
Habe es wie beschrieben configuriert und neu compiliert.
Verfasst: 7. November 2007 21:39
von gerd87
Mir sind noch einige Fehlermeldungen aufgefallen:
Mein_Programm\qmake_image_collection.cpp konnte nicht gefunden werden.
Mein_Programm\debug\moc_mainform.cpp konnte nicht gefunden werden.
Warum sucht er denn in debug, obwohl das Programm als release eingestellt ist?
Ich kompiliere Das Projekt übrigens mit QDevelop.
Verfasst: 7. November 2007 22:25
von CaptnChaos
CONFIG += release
btw, wenn du qt neu kompilierst, musst du qmake für dein Projekt erneut aufrufen und desweiteren habe ich nie behauptet du müsstest Qt neu kompilieren.... ich habe lediglich gesagt das ein Statement überflüssig ist....
Verfasst: 9. November 2007 00:47
von gerd87
so, habe jetzt mal alles gelöscht, und die neusten Versionen von Qt und MinGW installiert.
Dann habe ich es so konfiguriert:
configure -static -release -no-exceptions -qt-sql-odbc -qt-sql-mysql -qt-sql-sqlite -qt-gif -qt-libpng -qt-libjpeg -qt-libtiff -no-vcproj
Und wie oben beschrieben die .pro und main.cpp Dateien angepasst.
Leider bekomme ich immer noch diese Fehlermeldung:
release\main.o(.text+0x109):main.cpp: undefined reference to `qt_plugin_instance_qjpeg()'
Gruß, Gerd
Verfasst: 9. November 2007 01:17
von dhcase
Versuch mal die Lib in deinem .pro hinzuzufügen: LIB += qjpeg.lib
Verfasst: 9. November 2007 01:24
von gerd87
Danke für die Antwort.
Habe es schonmal in einem Beitrag gesehen, jedoch habe ich keine qjpeg.lib
qjpeg4.dll ist da und noch mehr statische libs im \plugins\imageformats Ordner.
Kannst du die lib evtl. als Anhang mitgeben?
Verfasst: 9. November 2007 01:31
von dhcase
gerd87 hat geschrieben:Danke für die Antwort.
Habe es schonmal in einem Beitrag gesehen, jedoch habe ich keine qjpeg.lib
qjpeg4.dll ist da und noch mehr statische libs im \plugins\imageformats Ordner.
Kannst du die lib evtl. als Anhang mitgeben?
Wenn Du Qt statsich kompliliert hast, dann müsste die qjpeg.lib eigentlich im Ordner \plugins\imageformats sein...
Verfasst: 9. November 2007 06:37
von gerd87
Hallo,
habe es nach dieser Anleitung Installiert und statisch kompiliert.
http://qtforum.de/forum/viewtopic.php?t=5343
Die qjpeg.lib ist immer noch nicht da.
kannst du die Datei mal hier anhängen? Ich möchte versuchen, die Lib mauell hinzuzufügen.
Gerd