[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 an

    Ich 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


Anmelden zum Antworten