Russian Qt Forum

Qt => Общие вопросы => Тема начата: bybyyura от Июль 29, 2010, 23:12



Название: QTextEdit сохранить текст в файл .txt
Отправлено: bybyyura от Июль 29, 2010, 23:12
Привет! как сохранить текст введенный в QTextEdit в текстовый файл? С QT дел не имел, но захотелось начать программировать под симбиан.
Покажите код по сабжу, пожалуйста с объяснением.

ps
Qt Creator 2.0.0
Основан на Qt 4.7.0 (32-х битной)


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: kibsoft от Июль 29, 2010, 23:41
Примерно так:

QFile file("out.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
         return;

QTextStream out(&file);//поток для записи текста
out << textEdit->toHtml(); или toPlainText() в зависимости от того нужна ли разметка или нет


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: bybyyura от Июль 30, 2010, 09:39
 :( неполучается.
вот скинул на форму QTextEdit и Push Button. Как осуществить событие при нажатие на Push Button, чтобы текст сохранился из QTextEdit в файл. По верхнему примеру сплошные ошибки, видно где-то нужно объявлять процедуры?

Я полный нуб  >:(


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: crossly от Июль 30, 2010, 10:14
тогда может стоить начать с документации ?? Бланшет, Шлее почитать...


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: bybyyura от Июль 30, 2010, 10:36
но было бы лучше, если кто-нибудь объяснил


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: kibsoft от Июль 30, 2010, 11:16
Код:
но было бы лучше, если кто-нибудь объяснил
Чем отличается текст книги от текста, который напишет человек с форума?

Создаешь слот:
Код:
private slots:
void buttonClicked();

Соединяешь:
Код:
connect(button,SIGNAL(clicked()),this,SLOT(buttonClicked()));

В слоте пишешь реализацию(что я написал в пред. посте)


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: bybyyura от Июль 30, 2010, 12:00
спасибо, получилось.


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: SABROG от Июль 30, 2010, 12:26
Код
C++ (Qt)
void Widget::on_pushButton_clicked()
{
   QTextDocumentWriter writer("filename.txt", "plaintext");
   writer.write(ui->textEdit->document());
}
 


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: bybyyura от Июль 30, 2010, 12:49
как теперь считать из этого файла при запуске программы?

нашел код:
Код:
QStringList lines;
        QFile file( "C:/1.txt" );
        if ( file.open( QFile::ReadOnly ) ) {
            QTextStream stream( &file );
            QString line;

            while ( !stream.atEnd() ) {
                line = stream.readLine(); // line of text excluding '\n'
                lines += line;
                         }
            file.close();
        }
где нужно подправить чтобы текст отобразился в QtextEdit?


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: SABROG от Июль 30, 2010, 13:20
Код
C++ (Qt)
   QFile file("filename.txt");
   if (file.open(QIODevice::ReadOnly))
       ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));
 


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: bybyyura от Июль 30, 2010, 13:32
спс, все работает


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: SABROG от Июль 30, 2010, 13:36
Еще один вариант:

Код
C++ (Qt)
   QFile file("filename.txt");
 
   if (!file.open(QIODevice::ReadOnly))
       return;
 
   while (!file.atEnd()) {
       ui->textEdit->textCursor().insertText(QString::fromUtf8(file.readLine()));
   }
 


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: bybyyura от Июль 30, 2010, 13:48
назрел вопрос, как удалить txt файл (либо очистить)?
Вроде нашел
Код:
QFile::remove(C:/1.txt");


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: Геннадий Носов от Март 03, 2016, 20:29
Здравствуйте.

Прошу прощения, за практически полное повторение вопроса, который уже был задан выше...
Собственно, проблема такая: есть виджет с полем QTextEdit и кнопкой QPushButton. Нужно ввести что-нибудь в текстовом поле и сохранить в файл по нажатию кнопки.
Изначально это был пример из Шлее по записи в текстовый файл. Я решил его немного развить, а то ведь мало счастья если правильно работает программа, один в один скопированная из книги.

Я попытался создать класс, содержащий текстовое поле, кнопку и слот с кодом для записи в файл. Если в слот не передаётся никаких значений, а текст создаётся прямо там - всё сохраняется. Если я пытаюсь передать в слот ссылку на объект QTextEdit созданный в виджите - программа не работает. (Этот вариант в тексте закомментирован)

Подскажите пожалуйста, что не так?

main:
Код:
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.h:
Код:
#ifndef WIDGET_H
#define WIDGET_H

#include <QtWidgets>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    QTextEdit * qtext;
    QPushButton * btn;
    QVBoxLayout * layout;


//public slots:
//    void SaveToFile(QTextEdit*qt);

public slots:
        void SaveToFile();
};

#endif // WIDGET_H
widget.cpp:
Код:
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{

    QTextEdit * qtext = new QTextEdit;
    QPushButton * btn = new QPushButton("&Save");
    QVBoxLayout * layout = new QVBoxLayout;

    //QObject::connect(btn,SIGNAL(clicked()),this,SLOT(SaveToFile(qtext)));

    QObject::connect(btn,SIGNAL(clicked()),this,SLOT(SaveToFile()));

    layout->addWidget(qtext);
    layout->addWidget(btn);
    setLayout(layout);

}

Widget::~Widget()
{

}

// void Widget::SaveToFile(QTextEdit * qt)
//{
//    QTextDocumentWriter * writer = new QTextDocumentWriter;
//    writer->setFormat("odf");
//    writer->setFileName("C:/Users/Геннадий/Desktop/output.odf");
//    writer->write(qt->document());
//     qDebug()<<"it worck";
// }
  void Widget::SaveToFile()
 {   QTextEdit * qtext = new QTextEdit("Text to save");
     QTextDocumentWriter * writer = new QTextDocumentWriter;
     writer->setFormat("odf");
     writer->setFileName("C:/Users/Геннадий/Desktop/output.odf");
     writer->write(qtext->document());
      qDebug()<<"it worck";
  }


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: Racheengel от Март 03, 2016, 21:46
А откуда слот узнает, что в него передается? Ведь у сигнала clicked () нет параметров. Следовательно, работать не будет.
Так что используйте второй вариант.


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: Геннадий Носов от Март 04, 2016, 20:16
А откуда слот узнает, что в него передается? Ведь у сигнала clicked () нет параметров. Следовательно, работать не будет.
Так что используйте второй вариант.
Дело в том, что я хочу вводить текст в процессе работы программы, и сохранять через кнопку. Во втором варианте сохраняется только то, что я заранее в слоте прописал.
Это делается элементарно, если я использую конструктор форм пользовательского интерфейса (который файлы .ui создаёт) - размещаю на форме кнопку и текстовую область, в соединении сигнал-слот пишу
Код:
QObject::connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(saveText()));
а в слоте
Код:
writer.write(ui->textEdit->document());
Но вот интересно, в изначальном варианте, без создания формы .ui как-то можно сохранение текста из QTextEdit в файл реализовать?


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: gil9red от Март 04, 2016, 20:43
Геннадий Носов, у вас очень странный код.

h:
Код
C++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QWidget>
#include <QTextEdit>
#include <QTextStream>
#include <QPushButton>
 
class MainWindow : public QWidget
{
   Q_OBJECT
 
public:
   MainWindow(QWidget *parent = 0);
   ~MainWindow();
 
private:
   QTextEdit * textEdit;
 
   QPushButton * buttonOpen;
   QPushButton * buttonSave;
 
public slots:
   void open();
   void save();
};
 
#endif // MAINWINDOW_H
 

cpp:
Код
C++ (Qt)
#include "mainwindow.h"
 
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QMessageBox>
#include <QFileDialog>
#include <QTextStream>
 
 
MainWindow::MainWindow(QWidget *parent)
   : QWidget(parent)
{
   textEdit = new QTextEdit();
 
   buttonOpen = new QPushButton("Open");
   connect(buttonOpen, SIGNAL(clicked()), SLOT(open()));
 
   buttonSave = new QPushButton("Save");
   connect(buttonSave, SIGNAL(clicked()), SLOT(save()));
 
   QHBoxLayout * buttonsLayout = new QHBoxLayout();
   buttonsLayout->addWidget(buttonOpen);
   buttonsLayout->addWidget(buttonSave);
 
   QVBoxLayout * layout = new QVBoxLayout();
   layout->addLayout(buttonsLayout);
   layout->addWidget(textEdit);
 
   setLayout(layout);
}
 
MainWindow::~MainWindow()
{
 
}
 
void MainWindow::open() {
   const QString& fileName = QFileDialog::getOpenFileName(this);
   if (fileName.isEmpty()) {
       return;
   }
 
   QFile file(fileName);
   if (file.open(QIODevice::ReadOnly)) {
       QTextStream in(&file);
       textEdit->setText(in.readAll());
   } else {
       QMessageBox::warning(this, "Warn", file.errorString());
   }
}
 
void MainWindow::save() {
   const QString& fileName = QFileDialog::getSaveFileName(this);
   if (fileName.isEmpty()) {
       return;
   }
 
   QFile file(fileName);
   if (file.open(QIODevice::WriteOnly)) {
       QTextStream out(&file);
       out << textEdit->toHtml();
   } else {
       QMessageBox::warning(this, "Warn", file.errorString());
   }
}
 


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: Racheengel от Март 04, 2016, 20:44
Сделайте qtext членом класса, и тогда он будет виден в слоте.
А уже в слоте доставайте текст и передавайте в метод сохранения.

*gil9red*, Вы меня опередили)


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: Геннадий Носов от Март 04, 2016, 21:17
Геннадий Носов, у вас очень странный код

Спасибо)
Что до странного кода...
Наверное это по тому что в институте мы вообще Fortran проходили, а потом мне захотелось чтоб у программ был красивый интерфейс)

Спасибо, всё заработало, и я даже понял, в чём была ошибка)
Действительно, глупо было второй раз объявлять те же самые переменные уже в файле .cpp Непривычно просто, когда программа на несколько файлов разбита) В Fortrane мы так не делали)


Название: Re: QTextEdit сохранить текст в файл .txt
Отправлено: gil9red от Март 04, 2016, 22:57
Геннадий Носов, у вас очень странный код

Спасибо)
Что до странного кода...
Наверное это по тому что в институте мы вообще Fortran проходили, а потом мне захотелось чтоб у программ был красивый интерфейс)

Спасибо, всё заработало, и я даже понял, в чём была ошибка)
Действительно, глупо было второй раз объявлять те же самые переменные уже в файле .cpp Непривычно просто, когда программа на несколько файлов разбита) В Fortrane мы так не делали)

Научитесь еще :)