Alles rund um die Programmierung mit Qt
gerd87
Beiträge: 41 Registriert: 18. Februar 2007 17:37
Beitrag
von gerd87 » 6. November 2007 21:44
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 » 6. November 2007 22:30
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 » 6. November 2007 23:56
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 » 7. November 2007 01:11
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 » 7. November 2007 07:25
Musst du meines Wissens nur machen wenn Qt statisch gelinkt ist.
gerd87
Beiträge: 41 Registriert: 18. Februar 2007 17:37
Beitrag
von gerd87 » 7. November 2007 16:49
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 » 7. November 2007 17:06
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 » 7. November 2007 21:04
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 » 7. November 2007 21:39
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 » 7. November 2007 22:25
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 » 9. November 2007 00:47
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 » 9. November 2007 01:17
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 » 9. November 2007 01:24
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 » 9. November 2007 01:31
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 » 9. November 2007 06:37
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