[gelöst] jpg und gif als Pixmap in QLabel

Alles rund um die Programmierung mit Qt
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

[gelöst] jpg und gif als Pixmap in QLabel

Beitrag 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
Zuletzt geändert von gerd87 am 9. November 2007 16:59, insgesamt 1-mal geändert.
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

Du musst noch die Plugins für jpeg und gif laden.
Wir hatten hier schon mal so einen Thread. Such bitte mal.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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() );
   


.........................
speack português italiano deutsch english castellà qt
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

Beitrag 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?
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

Code: Alles auswählen

Q_IMPORT_PLUGIN(qjpeg) 
Musst du meines Wissens nur machen wenn Qt statisch gelinkt ist.
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

Beitrag 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?
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag 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.
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

Beitrag von gerd87 »

Ich benutze Windows XP.
Habe es wie beschrieben configuriert und neu compiliert.
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

Beitrag 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.
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag 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....
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

Beitrag 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
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

Versuch mal die Lib in deinem .pro hinzuzufügen: LIB += qjpeg.lib
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

Beitrag 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?
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag 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...
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

Beitrag 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
Antworten