In deiner Methode baust du dir einen String für den Dateinamen zusammen, speichern tust du aber nicht.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.
QFile durch QImage ersetzten
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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!nici hat geschrieben:ja stimmt, aber bei QString gibt es kein .save. Wie soll das gehen??
i
Du willst das Image speichern, nicht den String - warum sollte also dann der String ein .save() haben???
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
http://doc.trolltech.com/4.4/qpixmap.html#savenici hat geschrieben:ja stimmt, aber bei QString gibt es kein .save. Wie soll das gehen??
lg
nici
[edit] Dennoch wäre ein bisschen Grundlagenforschung glaube ich nicht schlecht
dannkke,
guck mal, ich glaub ich habe es falsch einsgestzt.
ich versuche es ja wirklich alleine hinzubekommen, aber ohne beispiele oder ein kleiner Anfang geht das bei mir sehr schlecht.
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");
}
};Hmm mir fällt nichts ein ^^
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.nici hat geschrieben:ach man, kann mir denn keiner sagen was ich falsch gemacht habe??
lg
nici
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
hi,
ja ich habe eine funktion loadFIle().
[/code]
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));
}
};
Hmm mir fällt nichts ein ^^
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");
};
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??
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 ^^
Es muss imageLabel->pixmap()->save() heißen. Mein Fehler.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??