In Textdatei schreiben
-
Hi,
ich versuche gerade eine Qt Widgets Application mit zwei QPushButtons und einem QLineEdit zu schreiben.
Beim Klicken des ersten Buttons soll eine Textdatei erzeugt werden.
Beim Klicken des zweiten Buttons soll der Text aus dem Line Edit in diese Textdatei geschrieben werden.
Demnach muss man natürlich den ersten Button drücken bevor man den zweiten drücken kann.Das Programm sieht so aus:
._____________________________________
I
| __________________
| |Textdatei erzeugen|<-------------------------pushButton
| ------------------------------
| ______________________
| |In Textdatei schreiben| |<------------------pushButton_2
| ------------------------------------
|________________________
|.........................................| <-----------------lineEdit
|_____________________________________Das Erzeugen einer Textdatei über pushButton funktioniert.
//Beim Drücken des Buttons öffnet sich der Dialog und ich kann den Namen für die Textdatei vergeben void MainWindow::on_pushButton_clicked() { QFile *datei = new QFile(sName); sName = QFileDialog::getSaveFileName(this,"Datei speichern...", QDir::currentPath(), "Texte(*.txt)"); datei = new QFile(sName); //sName ist ein QString datei->open(QIODevice::WriteOnly); datei->close(); }
Beim Drücken des zweiten Buttons stürzt das Programm immer ab.
Unabhängig davon ob etwas im lineEdit steht.//Button um in Textdatei zu schreiben void MainWindow::on_pushButton_2_clicked() { datei->open(QIODevice::WriteOnly); sText = ui->lineEdit->text(); //Der Text wird über das QLineEdit eingelesen QDataStream stream(datei); stream<<sText; datei->close(); }
Für die Vollständigkeit zeige ich hier noch die Deklarationen in mainwindow.h:
private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); private: Ui::MainWindow *ui; QString sName, sText; QFile *datei;
Es gibt keine Warnmeldung und keine Fehlermeldung.
Sieht jemand den Fehler im Slot on_pushButton_2_clicked?
-
@theAnfänger77 sagte in In Textdatei schreiben:
QFile *datei = new QFile(sName);
macht eine lokale Variable.
-
Vielen Dank!
Das ist es
-
@theAnfänger77 What!?
-
Der Fehler war im ersten Slot.
So geht es:void MainWindow::on_pushButton_clicked() { //QFile *datei = new QFile(sName); sName = QFileDialog::getSaveFileName(this,"Datei speichern...", QDir::currentPath(), "Texte(*.txt)"); datei = new QFile(sName); //sName ist ein QString datei->open(QIODevice::WriteOnly); datei->close(); }
Jetzt wird der Text aus dem QLineEdit in die .txt Datei geschrieben.
Nur die Codierung scheint nicht UTF-8 zu sein.
Warum weis ich noch nicht.
Wenn z.B. im QLineEdit steht: abcd1234
Steht in der .txt Datei etwas wie: [] a b c d 1 2 3 4
-
Glaub ich muss den Text im lineEdit irgendwie in UTF-8 bekommen.
Vielleicht irgendwie so:
ui->lineEdit->setText(QString::fromUtf8());
-
@theAnfänger77 sagte in In Textdatei schreiben:
Glaub ich muss den Text im lineEdit irgendwie in UTF-8 bekommen.
@theAnfänger77 sagte in In Textdatei schreiben:
QDataStream stream(datei);
QTextStream
ftw.Mach dir mal darüber Gedanken daß Du ständig Speicher leckst.
class MainWindow // ... { // ... private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); // ... private: Ui::MainWindow *ui; QString filename; // ... }; void MainWindow::on_pushButton_clicked() { filename = QFileDialog::getSaveFileName(this,"Datei speichern...", QDir::currentPath(), "Texte (*.txt)"); QFile file(filename); datei.open(QIODevice::WriteOnly); } void MainWindow::on_pushButton_2_clicked() { QFile file(filename); file.open(QIODevice::WriteOnly); QTextStream stream(&file); stream << ui->lineEdit->text(); }
... oder so ähnlich.
-
Vielen Dank!
Mit dem Textstream geht es://Button um Textdatei zu erstellen void MainWindow::on_pushButton_clicked() { filename = QFileDialog::getSaveFileName(this,"Datei speichern...", QDir::currentPath(), "Texte (*.txt)"); } //Button um in Textdatei zu schreiben void MainWindow::on_pushButton_2_clicked() { QFile file(filename); file.open(QIODevice::WriteOnly); QTextStream stream(&file); //#include <QTextStream> stream << ui->lineEdit->text(); }
Alles geht jetzt ohne Fehler.