File Saving Support - Text File



  • Hello,

    I have a question regarding a text file saving theme. I have to save the file just once, get the current filename and if the file exists it should just save the file without asking or opening the file saving window. For the first time it works, but by the second task i need a way and suggestions of code. I paste the the complete code below (fokus on the section "speichern" which saves it) :
    Thank you in advance

    
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    //für die Datei
    #include <QFile>
    //für die Standarddialoge
    #include <QFileDialog>
    //für die MessageBox
    #include <QMessageBox>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        //die Verbindungen herstellen
        //die ersten drei gehen jeweils auf einen eigenen Slot
        //die letzte nutzt einen Standard-Slot
        connect(ui->actionNeu, SIGNAL(triggered(bool)), this, SLOT(dateiNeu()));
        connect(ui->action_ffnen, SIGNAL(triggered(bool)), this, SLOT(dateiOeffnen()));
        connect(ui->actionSpeichern, SIGNAL(triggered(bool)), this, SLOT(dateiSpeichern()));
        connect(ui->actionBeenden, SIGNAL(triggered(bool)), this, SLOT(close()));
    
        connect(ui->actionInfo, SIGNAL(triggered(bool)), this, SLOT(dateiInfo()));
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    
    //der Slot - dateiInfo()
    
    void MainWindow::dateiInfo()
    {
        QMessageBox::information(this,"Information","Mini Editor - Programmiert von Mehmet Yilmazer - 2017");
    }
    
    
    //die Slots
    //zum "Anlegen" einer neuen Datei
    void MainWindow::dateiNeu()
    {
        //die Abfrage
        QMessageBox meineAbfrage(QMessageBox::Question, "Abfrage", "Wollen Sie wirklich eine neue Datei anlegen?", QMessageBox::Yes | QMessageBox::No);
        meineAbfrage.setButtonText(QMessageBox::Yes, "Ja");
        meineAbfrage.setButtonText(QMessageBox::No, "Nein");
        //die Abfrage ausführen und auswerten
        //war die Antwort Ja?
        if (meineAbfrage.exec() == QMessageBox::Yes)
            ui->textEdit->clear();
    }
    
    //zum Öffnen der Datei
    void MainWindow::dateiOeffnen()
    {
        //den Öffnendialog erzeugen
        QString dateiName = QFileDialog::getOpenFileName(this, "Datei öffnen", QDir::currentPath(), "Textdateien (*.txt)");
        //wenn eine Datei ausgewählt wurde
        if (dateiName.isEmpty() == false)
        {
            //eine Instanz von QFile für die Datei erzeugen
            QFile *datei = new QFile(dateiName);
            //die Datei im Modus Nur-Lesen öffnen
            if (datei->open(QIODevice::ReadOnly))
            {
                //den kompletten Inhalt laden und in das Widget setzen
                ui->textEdit->setPlainText(QString::fromUtf8(datei->readAll()));
                //eine Meldung in der Statusleiste anzeigen
                ui->statusBar->showMessage("Die Datei wurde geladen.", 5000);
                //die Datei wieder schließen
                datei->close();
            }
        }
    }
    
    //zum Speichern einer Datei - PART SAVING
    void MainWindow::dateiSpeichern()
    {
    
        //den Speichern-Dialog erzeugen
        QString dateiName = QFileDialog::getSaveFileName(this, "Datei speichern", QDir::currentPath(), "Textdateien (*.txt)");
    
    
        //wenn eine Datei ausgewählt wurde
        if (dateiName.isEmpty() == false)
         {
            //eine Instanz von QFile fur die Datei erzeugen
            QFile *datei = new QFile(dateiName);
            
            //die Datei im Modus Nur-Schreiben öffnen
            if (datei->open(QIODevice::WriteOnly))
            {
                //den kompletten Inhalt aus dem Widget in die Datei schreiben
                datei->write(ui->textEdit->toPlainText().toUtf8());
                //eine Meldung in der Statusleiste anzeigen
                ui->statusBar->showMessage("Die Datei wurde gespeichert.", 5000);
                //die Datei wieder schließen
                datei->close();
            }
          }
    
        //for (int i=0 ; i<1 ; i++)
        //QMessageBox::information(this,"Info","Die Datei wurde schon gespeichert");
    }
    
    


  • Hi,

    Pas facile à suivre ton histoire !
    I guess you don't understand what've said above, the same for me with your code, cause I don't speak Deutch (?)
    Anyway, I think you simply need to record the path in the QSettings of your app and test if it exists before asking the user.


  • Lifetime Qt Champion

    Hi,

    You have to keep the current file name, and check whether it's empty when you save the file. If that's the case, then as for a file name and store it so next time you only do the saving part.

    Note that currently you have a memory leak. You never delete your datei object.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.