[gslöst]ofstream ifstream nicht in QT?
[gslöst]ofstream ifstream nicht in QT?
Es gibt ja C++ bzw. fstream die Streams ifstream und ofstream, die der Library fstream enthalten sind.
Die Einbindung von fstream.h funktioniert in meinem QT-Programm problemlos.
Gibts ifstream und ofstream nicht mehr.
Und wenn ja ist fsteam eine "andere" fstream in qt?
Die Einbindung von fstream.h funktioniert in meinem QT-Programm problemlos.
Gibts ifstream und ofstream nicht mehr.
Und wenn ja ist fsteam eine "andere" fstream in qt?
Re: [gelöst]ofstream ifstream nicht in QT?
Hat sich erledigt (gleich noch ein Demo für Umwandlung QString in string):
Libs einbinden:
#include <fstream> //Für export und ostream, ifstream
using namespace std; //Für export und ostream, ifstream
------------------------------------------
void MainWindow::export_csv()
{
qDebug()<< "Hier ist export_csv" << "--";
QMessageBox::information(this, "Info", "export_csv");
ofstream textDatei("datei_schreiben.txt");
//QString nachname, vorname, telefon wurden aus Datenbank gelesen
if(textDatei)
{
textDatei << nachname.toStdString() << ";" << vorname.toStdString() << ";" << telefon.toStdString() << endl;
}
else
cout << "Dateifehler" << endl;
}
Libs einbinden:
#include <fstream> //Für export und ostream, ifstream
using namespace std; //Für export und ostream, ifstream
------------------------------------------
void MainWindow::export_csv()
{
qDebug()<< "Hier ist export_csv" << "--";
QMessageBox::information(this, "Info", "export_csv");
ofstream textDatei("datei_schreiben.txt");
//QString nachname, vorname, telefon wurden aus Datenbank gelesen
if(textDatei)
{
textDatei << nachname.toStdString() << ";" << vorname.toStdString() << ";" << telefon.toStdString() << endl;
}
else
cout << "Dateifehler" << endl;
}
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: [gslöst]ofstream ifstream nicht in QT?
Wenn ich schon QString benutze, dann auch QFile und QTextStream ...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: [gslöst]ofstream ifstream nicht in QT?
Noch nen Tipp:
meide QString::toStdString
Die funktion ist praktisch, aber gibtn Template als returnvalue zurueck ...
Bei der geringsten Compilerunstimmigkeit kracht dir das Ding ...
Besser: in deinem Modul den std::string erzeugen lassen. zum convertieren kannst toLocal8bit hernehmen.
Wenn sicherstellen kannst, das die QT Compilerversion und dein compiler 100% binaerkompatibel auch auf template generierten code sind, wirst keinen unterschied merken.
Aber wenn mal an den compilereinstellungen rumbaust, oder compilerversionen mixt, ist toStdString das erste was dir um die Ohren fliegt ...
Ansonsten hör auf Christian81
Ciao ...
meide QString::toStdString
Die funktion ist praktisch, aber gibtn Template als returnvalue zurueck ...
Bei der geringsten Compilerunstimmigkeit kracht dir das Ding ...
Besser: in deinem Modul den std::string erzeugen lassen. zum convertieren kannst toLocal8bit hernehmen.
Code: Alles auswählen
std::string convert(const QString & value)
{
QByteArray arrValue = value.toLocal8Bit();
return arrValue.empty() ? std::string() : std::string(arrValue.constData(),arrValue.size());
}
Aber wenn mal an den compilereinstellungen rumbaust, oder compilerversionen mixt, ist toStdString das erste was dir um die Ohren fliegt ...
Ansonsten hör auf Christian81
Ciao ...
-
- Beiträge: 149
- Registriert: 1. April 2009 19:25
Re: [gslöst]ofstream ifstream nicht in QT?
@RHBaum: Was meinst du mit Templates?
So siehts im Qt5-Code aus:
QString::toUtf8 erzeugt ein QByteArray
Somit kann er doch QString::toStdString problemlos nutzen?
So siehts im Qt5-Code aus:
Code: Alles auswählen
inline std::string QString::toStdString() const
{ return toUtf8().toStdString(); }
Code: Alles auswählen
inline std::string QByteArray::toStdString() const
{ return std::string(constData(), length()); }
Re: [gslöst]ofstream ifstream nicht in QT?
std::string ist nen templateWas meinst du mit Templates?
und templates ueber dll grenzen ....
Im Qt5 Code siehts ned schlimm aus wegen dem "inline"
Wenn er (der Präprozessor) wirklich inlined, sollt es eigentlich auch funktionieren ....
Dann wird der code da erzeugt wo die funktion verwendet wird.
Bei meiner Umgebung(Visual Studio 2010-2015) kracht es genau bei den Funktionen ... sobald Qt runtime und App runtime nicht zu 100% zusammen passen.
Hier langts schon, wenn paar compilerflags ned zueinander passen. exception support, rtti, wchar_t typ .. etc.
umgehe ich das mit ner eigenen funktion, läuft ne qt5.4 gebaut mit vs 2012 und ne App gebaut mit vs 2013 zusammen (So wie es microsoft verspricht ^^)
release und debug ist an der stelle auch egal, ist trotzdem nachvollziehbar.
Eigentlich nen Indiz, das er das zeugs nicht inlined sondern symbole erzeugt .... und das nicht nur im debug.
mingw installationen kann ich nix zu sagen, keine ahnung obs da auch so ist ...
und unter linux durch den system compiler ist das problem eh nicht relevant
Aber vielleicht mach ich auch was falsch ...
Ciao ...
Re: [gslöst]ofstream ifstream nicht in QT?
Eigentlich wollte ich vor 2 Monaten nur rausfinden, wie man mittlerweile Masken baut.
Denn Turbo-Pascal unter MS-DOS ist leicht obsolet.
Zur Auswahl standen GTK+ und QT. Das lief dann so gut, dass ich gleich angefangen hab, die PHP-Adressverwaltung umzubauen.
-----------------------------------------------
Aktuelle Problemstellung:
Für den Export hab ich die Standard - C++ - Funktionen benutzt, falls Bibliotheken entstehen, mag ich die ehrlich gesagt nicht doppelt bauen.
Der Ausflug in die C++ - Bibliotheken war hier nur für die CSV- Exportfunktion.
Tja nun bin ich am Wackeln.
Gute Ratschläge sollte man annehmen.
Diese Funktion, die hier aufgelistet verwenden?
Doch zum reinen Glauben in der Art:
QFile file("out.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
QTextStream out(&file);
out << "The magic number is: " << 49 << "\n";
Es könnte nämlich sein, dass ich das Programm mal unter Windows kompilieren möchte. (Dazu hier im Forum ein anderer Thread von mir).
Denn Turbo-Pascal unter MS-DOS ist leicht obsolet.
Zur Auswahl standen GTK+ und QT. Das lief dann so gut, dass ich gleich angefangen hab, die PHP-Adressverwaltung umzubauen.
-----------------------------------------------
Aktuelle Problemstellung:
Für den Export hab ich die Standard - C++ - Funktionen benutzt, falls Bibliotheken entstehen, mag ich die ehrlich gesagt nicht doppelt bauen.
Der Ausflug in die C++ - Bibliotheken war hier nur für die CSV- Exportfunktion.
Tja nun bin ich am Wackeln.
Gute Ratschläge sollte man annehmen.
Diese Funktion, die hier aufgelistet verwenden?
Doch zum reinen Glauben in der Art:
QFile file("out.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
QTextStream out(&file);
out << "The magic number is: " << 49 << "\n";
Es könnte nämlich sein, dass ich das Programm mal unter Windows kompilieren möchte. (Dazu hier im Forum ein anderer Thread von mir).
Re: [gelöst]ofstream ifstream nicht in QT?
So die Exportfunktion wurde jetzt anständig auf QT-Methode umgeschrieben:
ofstream textDatei("adr.csv")
wurde ersetzt durch:
QFile file("adr.csv");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::information(this, "Info", "Fehler beim Öffnen der Datei");
return;
}
QTextStream textDatei(&file);
Die Exportdatei wird dann so geschrieben (Auschnitt):
QString Trenner = ";";
textDatei << firma << Trenner;
textDatei << nachname << Trenner;
textDatei << vorname << Trenner;
textDatei << telefon << Trenner;
textDatei << telefon_2 << Trenner;
textDatei << fax << Trenner;
textDatei << email << Trenner;
textDatei << email_2 << Trenner;
textDatei << website << Trenner;
ofstream textDatei("adr.csv")
wurde ersetzt durch:
QFile file("adr.csv");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::information(this, "Info", "Fehler beim Öffnen der Datei");
return;
}
QTextStream textDatei(&file);
Die Exportdatei wird dann so geschrieben (Auschnitt):
QString Trenner = ";";
textDatei << firma << Trenner;
textDatei << nachname << Trenner;
textDatei << vorname << Trenner;
textDatei << telefon << Trenner;
textDatei << telefon_2 << Trenner;
textDatei << fax << Trenner;
textDatei << email << Trenner;
textDatei << email_2 << Trenner;
textDatei << website << Trenner;
Re: [gslöst]ofstream ifstream nicht in QT?
Wenn Dir Qt genau das liefert, was Du brauchst, sprechen eigentlich nur handfeste Gründe dagegen es zu verwenden ^^
Ja Gründe dagegen gibt es auch, iss nur die Frage ob sie für Dich relevant sind ...
Ich entscheide mich gegebenen falls meist immer nur aus 2 Gründen gegen QT.
1. Abhaengigkeitsmanagement. Saubere Trennung GUI / Logic, und ich würde in der Logic Schicht Qt nur wegen dieser Funktionalitaet einführen .... Dann wären mir die Kosten (Versionsmanagement, Abhaengigkeit) zu hoch.
2. Ich fummel ziemlich tief und mit mehreren Threads rum. dann ist das impliziete Sharing bei Qt oft mehr nen Problem als Hilfe ...
Ciao ...
Ja Gründe dagegen gibt es auch, iss nur die Frage ob sie für Dich relevant sind ...
Ich entscheide mich gegebenen falls meist immer nur aus 2 Gründen gegen QT.
1. Abhaengigkeitsmanagement. Saubere Trennung GUI / Logic, und ich würde in der Logic Schicht Qt nur wegen dieser Funktionalitaet einführen .... Dann wären mir die Kosten (Versionsmanagement, Abhaengigkeit) zu hoch.
2. Ich fummel ziemlich tief und mit mehreren Threads rum. dann ist das impliziete Sharing bei Qt oft mehr nen Problem als Hilfe ...
Ciao ...
Re: [gslöst]ofstream ifstream nicht in QT?
Der Hauptgrund war eigentlich, dass die Syntax in "Standard-C++" so einfach ist, dass sie mir auswendig besser eingeht als die von QT.
Ich meine das Öffnen von Dateien.
Mittlerweile ist die Routine aber nach der "reinen Lehre". Das Schreiben der Felder mit den ganzen Adressfeldern war Gott sei Dank identisch
Ich meine das Öffnen von Dateien.
Mittlerweile ist die Routine aber nach der "reinen Lehre". Das Schreiben der Felder mit den ganzen Adressfeldern war Gott sei Dank identisch
Re: [gslöst]ofstream ifstream nicht in QT?
DIe Frage ist was meinst mit "Standard-C++" ?Der Hauptgrund war eigentlich, dass die Syntax in "Standard-C++" so einfach ist, dass sie mir auswendig besser eingeht als die von QT.
Ich empfinde es eher andersrum ....
die Qt syntax ist einfach/simple wenn man mal die richtigen Klassen und auch deren "richtigen" Einsatz Zweck kennt.
generisches C++, also templates mit der STL und Boost und anderen libs, find ich noch immer ... aehm ... weniger intuitiv, ich muss da trotzdem immer noch oft nachschauen.
Trotzdem mag ich auch lieber Boost und STL, nicht weil ich mich gern selbst geisele, sondern weil sie auch Vorteile haben auf Gebieten wo C++ seine hauptsächlichste Daseinsberechtigung hat.
Ciao ...