[QT4] String in datei Speichern
-
Hallo
Ich kämpfe mich nun schon durch etliche Seiten der QT docu ohne Erfolg und Versuchs einfach mal hier
also ich schreibe gerade einen kleinen Editor der einen nur in EINE Datei schreibt und nur aus einer Datei liest
das ganze Grundgerüst steht und die Signal uns slots sind auch eingerichtet.
Aber ich finde keine Möglichkeit einen string aus einer TextArea in eine Datei zu speichern oder wider zu lesen.
Ich finde beim googeln meist nur .Net konforme Lösungen die mir aber unter Ubuntu nix bringen
kann mir jemand Funktionstipps geben, einen kleinen Anstoß?
mfg
-
Hallo!
Das ist eigentlich das simpleste was es in Qt gibt
Hier mal ein Codeausschnitt (ich gehe davon aus, dass ich einen Slot implementiere):
void MainWindow::saveFile() { //Hier eine Variable mit dem Dateinamen deklarieren, eventuell durch Benutzereingabe QString filename; filename = "test.txt"; /** * TODO: Prüfen, ob die Datei vorhanden ist, oder sonstige "Sicherheits"aspekte, ich mache hier nur ein einfaches Beispiel */ //Datei öffnen QFile file(filename); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { //Fehlermelduing ausgeben QMessageBox::warning(this,"Fehler","Datei konnte nicht geöffnet werden!",QMessageBox::Ok); } else { //Datei wurde geöffenet, String aus Textbox auslesen QString toWrite; ui->editor->toPlainText().toAscii(); file.write(toWrite); //Fertig :-) } }
Das sollte eigentlich ausreichend kommentiert sein, hier noch der Link zu QFile: http://doc.qt.nokia.com/4.6/qfile.html
Ach ja.. es fehlt natürlich noch #include <QFile>
Du kannst mich gern in ICQ adden, wenn du Fragen hast: 408-106-933
Gruß,
Olli
-
Ich nochmal :xmas1:
Ich hab das Lesen ganz vergessen
Hier der Code:
void MainWindow::readFile() { QString filename; filename = QFileDialog::getOpenFileName(this,"Datei öffnen","","Alle DAteien (*.*)"); QFile file(filename); if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { //Bis hier sollte es klar sein. Mit readAll lese ich alle Zeichen und Zeilen der Datei aus ui->editor->setPLainText(file.readAll()); } }
Gruß,
Olli
-
Danke danke, echt hilfsbereite Beiträge, Oli
ich würde dich ja im ICQ adden. aber ich nutze diesen Messenger nicht mal x(
die Codeschnippel sehen eigentlich super aus, nur hab ich scheinbar ein paar Schwierigkeiten mit diesen Zeilen:
ui->editor->setPLainText(file.readAll()); ui->editor->toPlainText().toAscii();
ich denke ich liege richtig in der Annahme das ich jeweils
ui->editor->
durch meine Objekte ersetzen soll, nunja das PlainTextEdit heißt bei mir "TextArea" dadurch soll ich scheinbar Editor ersetzen.
aber was soll ich mit "ui" anfangen?
-
Hi!
Ich kann mich gerade leider nicht registrieren, da ich mit meinem Mailsever umziehe und es so etwas schwierig wird, die Bestätigungsmail zu beantworten
Also.. bei "ui" bin ich mir selber nicht ganz sicher, ein Profi bin ich in Qt noch nicht wirklich.
Nach meinem Wisse (kann auch falsch sein) ist es so:
Wenn du von dem Qt Designer eine Qt GUI Anwendung generiern lässt (also das Grundgerüst), dann wird dir auch der Namespace "ui" angelegt. UI steht (so weit ich weiß) für UserInterface, also die Benutzeroberfläche. Du kannst also mit dem UI Namespace mit deinen Widgets auf den Formen kommunizieren.
Dafür wird lediglich der Name des Objektes gebraucht. ui->{objekt_name}->{funktion oder attribut}
Wenn dein Editor also "frontEditor" heißt, dann sprichst du ihn mit ui->frontEditor anIch hoffe, es ist etwas klarer geworden, ich kann dir da leider keien Link zu geben.
-
Ah ja super
War wohl mein Fehler, ich habe mit dem kleinen Projektchen neu begonnen und bemerkt das ich beim alten einfach ne menge überflüssigen code geschrieben habe der einfach nur im weg war und nix gebracht hatte -.-"
Nunja eigentlich funktioniert nun alles, der einzige Fehler der vom Compiler im mom noch gemeldet wird ist folgendes:
/home/***/Fastnote-build-desktop/../Fastnote/fastnote.cpp:36: error: no matching function for call to ‘QFile::write(QString&)’
void fastnote::saveTxt() { QString filename; filename = "test.txt"; QFile file(filename); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(this,"Fehler","Datei konnte nicht geöffnet werden!",QMessageBox::Ok); } else { QString toWrite; ui->textArea->toPlainText().toAscii(); file.write(toWrite); //Zeile die den Fehler enthält } }
Zuerst habe ich gedacht das ich vergessen habe eine datei zu includen...
aber#include <QMainWindow>
#include <QMessageBox>
#include <QFile>sind im header includiert, daher müssten eigentlich alle die gebraucht werden verfügbar sein?
habe ich sonst noch was übersehen?ich kann leider mit der unsympathischen Meldung des Compilers nicht viel anfangen
mfg
-
Tu dir den Gefallen und schau dir QTextStream an: http://doc.qt.nokia.com/4.7/qtextstream.html#details
und irgendwie tut
QString toWrite; ui->textArea->toPlainText().toAscii(); file.write(toWrite); //Zeile die den Fehler enthält
nix ... du schreibst nen leeren QString raus ...
-
Hallo zusammen!
Ich bin jetzt auch endlich registriert!
Also erst einmal habe ich oben einen Fehler gemacht
Ich habe den String zwar definiert, aber ihm keinen Wert zugewiesen.. sorry for that!
Ansonsten sind die Streams natürlich eine weitere Möglichkeit, um beispielsweise in Dateien zu schreiben, sie haben aber noch weitaus mehr möglichkeiten!
Richtig sollte es so heißen:
QString toWrite; toWrite = ui->editor->toPlainText().toAscii(); file.write(toWrite);
Ansonsten schau dir hier die Doku zu QFile an: http://doc.qt.nokia.com/4.7/qfile.html#QFile das sollte auf jeden Fall weiterhelfen!
Gruß,
Olli