Unsolved 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. -
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.