QFile durch QImage ersetzten

Alles rund um die Programmierung mit Qt
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

nici hat geschrieben:hi,

was meinst du mit "wo ist dein Speichern", das ist halt die Methode zum speichern.
Es wird keine Endung drangehängt und es wird überhaupt nicht gespeichert. Weiss auch nicht warum.
In deiner Methode baust du dir einen String für den Dateinamen zusammen, speichern tust du aber nicht.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ja stimmt, aber bei QString gibt es kein .save. Wie soll das gehen??

lg

nici
Hmm mir fällt nichts ein ^^
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

nici hat geschrieben:ja stimmt, aber bei QString gibt es kein .save. Wie soll das gehen??
i
Eigentlich wollte ich mich hier ja nicht reinhängen, aber bei der Frage geht es nicht anders. Ich würde sagen - kauf Dir ein gutes Grundlagenbuch und fang an zu lesen! Du hast den Sinn der Objektorientierung imo nicht verstanden!
Du willst das Image speichern, nicht den String - warum sollte also dann der String ein .save() haben???
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

nici hat geschrieben:ja stimmt, aber bei QString gibt es kein .save. Wie soll das gehen??

lg

nici
http://doc.trolltech.com/4.4/qpixmap.html#save

[edit] Dennoch wäre ein bisschen Grundlagenforschung glaube ich nicht schlecht ;)
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

dannkke,
guck mal, ich glaub ich habe es falsch einsgestzt.

Code: Alles auswählen

void FileN::saveFile()
 {	 	
 	QFileDialog *tmp = new QFileDialog; //vorgefertigtes Fenster zum Speichern
 	 	
 	QString Dateiendung; //= "*.png";
 	QString fileName = tmp->getSaveFileName (this, "Speichern", "unbekannt" , "*.bmp;;*.jgp;;*.jpeg;;*.png;;*.tiff;;*.xbm;;*.xpm", &Dateiendung);
 	
 	//falls vom Benutzer keine Dateiendung angegeben wird: 	
	qWarning() << "TEST" << fileName;
	if (fileName.section('.', -1)!=Dateiendung.section('.',-1))
	{ 	
 	//Dateiendung an den Namen hängen:
 	fileName.append(Dateiendung.section('*',-1));
 	}else{
		 	QPixmap pixmap;
		 	QByteArray bytes;
		 	QBuffer buffer(&bytes);
		 	buffer.open(QIODevice::WriteOnly);
		 	pixmap.save(&buffer, "png");
 	}
 };
ich versuche es ja wirklich alleine hinzubekommen, aber ohne beispiele oder ein kleiner Anfang geht das bei mir sehr schlecht.
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ach man, kann mir denn keiner sagen was ich falsch gemacht habe??

lg

nici
Hmm mir fällt nichts ein ^^
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

nici hat geschrieben:ach man, kann mir denn keiner sagen was ich falsch gemacht habe??

lg

nici
In dem Code oben hast du eine eigene, leere, lokale Pixmap. Ich bin davon ausgegangen, dass du die Pixmap irgendwo öffnest (also das Bild lädsts), und es dann wieder speichern willst. In diesem Fall müsstest du von dieser Pixmap (die du schon geladen hast) die save() Funktion aufrufen.

Der zweite Fehler im Code ist, dass du "das Speichern" (was wegen Punkt 1 eh nicht klappt) nur ausführst, wenn die vom User gewählte Datei die gleiche Endung hat wie "Dateiendung". "Dateiendung" ist ein leerer QString, den du auch noch in getSaveFileName als selectedFilter mitgibst. Vermutlich ist die Zeile

QString Dateiendung; //= "*.png";

einfach nur versehentlich falsch, und sollte

QString Dateiendung= "*.png";

heißen.
Nichts desto trotz sollte das Speichern ohne QByteArray, ohne QBuffer und ausserhalb von if/else erfolgen, so wie ich das beispielsweise auf der letzten Seite gepostet habe.


[edit] Mit den Grundlagen war gemeint, dass du erstmal die Grundlagen der C++- bzw. der objektorientierten Programmierung kennenlernst, bevor du anfängst mit einem C++ Framework wie Qt zu programmieren. Wenn du nicht das grundlegende Wissen in C++ mitbringst, wirst du dich in Qt nur quälen ;)
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,
ja ich habe eine funktion loadFIle().

Code: Alles auswählen

void FileN::saveFile()
 {	 	
 	QFileDialog *tmp = new QFileDialog; //vorgefertigtes Fenster zum Speichern
 	 	
 	QString Dateiendung= "*.png";
 	QString fileName = tmp->getSaveFileName (this, "Speichern", "unbekannt" , "*.bmp;;*.jgp;;*.jpeg;;*.png;;*.tiff;;*.xbm;;*.xpm", &Dateiendung);
 	
 	//falls vom Benutzer keine Dateiendung angegeben wird: 	
	qWarning() << "TEST" << fileName;
	if (fileName.section('.', -1)!=Dateiendung.section('.',-1))
	{ 	
 	//Dateiendung an den Namen hängen:
 	fileName.append(Dateiendung.section('*',-1));
 	} 	 	
 };

Code: Alles auswählen

 
 void FileN::loadFile() 
 { 	
 	//QFileDialog *tmp2 = new QFileDialog;
												  
	QString fileName = QFileDialog::getOpenFileName(this, "Open File", "/home",("Images(*.bmp *.gif *.jgp *.jpeg *.png *.tiff *.xbm *.xpm)"));
	
	if(!fileName.isEmpty()){											  
 	QImage file(fileName);
    if(file.isNull()) 
	{
 	  qWarning()<<"Fehler beim öffnen der Datei!";
	}
	qWarning() << "ok";

	imageLabel->setPixmap(QPixmap::fromImage(file));
	}
	
 };
[/code]
Hmm mir fällt nichts ein ^^
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Code: Alles auswählen

void FileN::saveFile()
 {	 	
   QFileDialog *tmp = new QFileDialog; //vorgefertigtes Fenster zum Speichern
 	 	
   QString Dateiendung= "*. 
   QString fileName = tmp->getSaveFileName (this, "Speichern", "unbekannt" ,  *.bmp;;*.jgp;;*.jpeg;;*.png;;*.tiff;;*.xbm;;*.xpm", &Dateiendung);

   //falls vom Benutzer keine Dateiendung angegeben wird: 	

   qWarning() << "TEST" << fileName;

   if (fileName.section('.', -1)!=Dateiendung.section('.',-1))
   { 	
       //Dateiendung an den Namen hängen:
      fileName.append(Dateiendung.section('*',-1));
   } 	 	
   
   imageLabel->pixmap().save(fileName, "PNG");
 };
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hey cool dannnkkkee, es kommt nur ein Fehler, den ich wieder einmal nicht verstehe.

error: request for member 'save' in '((FileN*)this)->FileN::<anonymous>.Ui::FileN::<anonymous>.Ui_FileN::imageLabel-> QLabel::pixmap()', which is of non-class type 'const QPixmap*'


musst das vlt setPixmap heissen??
Hmm mir fällt nichts ein ^^
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

nici hat geschrieben:hey cool dannnkkkee, es kommt nur ein Fehler, den ich wieder einmal nicht verstehe.

error: request for member 'save' in '((FileN*)this)->FileN::<anonymous>.Ui::FileN::<anonymous>.Ui_FileN::imageLabel-> QLabel::pixmap()', which is of non-class type 'const QPixmap*'


musst das vlt setPixmap heissen??
Es muss imageLabel->pixmap()->save() heißen. Mein Fehler.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

jep, und da fehlt noch das fileName in den Klammern, sonst klappt es, ich danke dir sehr, dannnnkkkeeeeeeeee.

Jetzt kann ich endlich weiter machen, nächlich das ein Bild, das aus einer Funktion berechnet wird, auszugeben. das wird schwerrrrrrrrr.

lg

nici
Hmm mir fällt nichts ein ^^
Antworten