Подсказки на компьютерную тематику

Можно подсмотреть, если забыли…

Как работать с текстовыми файлами на Qt

Создание файла в Qt

    При необходимости создать файл для внесения в него данных через C++ на Qt следует:

  • придумать его имя, например fortext.txt
  • в коде программы, например в mainwindow.cpp дописать текст:
    #include "QFile" //подключает класс для работы с файлами
    QFile file("fortext.txt");//создать объект для работы с fortext.txt, который будет помещен в каталог с компилированными файлами проекта, если же нужно другое место в системе, то следует указать весь путь в скобках

Запись в текстовый файл в Qt

    Перед внесением данных в ранее созданный объект file требуется:

  • открыть файл для записи с нуля
  • file.open(QIODevice::WriteOnly);//открываем файл fortext.txt для перезаписи данных, при этом вся предыдущая информация будет удалена!
  • или для добавления информации
  • file.open(QFile::Append |QFile::Text);//открываем файл fortext.txt, для добавления текста, при этом вся предыдущая информация сохранится!
  • внести нужное значение, например вносимый текст
  • file.write("вносимый текст");//записываем в файл значение
  • закрыть файл
  • file.close();//закрываем файл
  • данные должны быть внесены в файл по указанному адресу относительно пути к папке с компилированной программой

Чтение содержимого из файла в Qt

    Чтобы считать данные из ранее созданного текстового документа file надо:

  • подключить класс для вывода данных в консоли Qt
  • #include "QDebug"//подключает класс для работы с выводом результата в консоль
  • открыть указанный документ для чтения
  • file.open(QIODevice::ReadOnly);//открываем файл только для чтения
  • получение информации осуществляется методом file.readAll()

  • Внимание: после срабатывания file.readAll() эти же данные не получится вывести еще раз! Для повторного вывода надо создать еще один объект QFile file1("fortext.txt");


  • для вывода всего содержимого в одну строку используется
  • qDebug() << QString::fromUtf8(file.readAll()); //вывод всего текста в одну строку
  • а для чтения файла построчно применяется
  • while (!file.atEnd()) {
    QByteArray line = file.readLine();
    qDebug() << QString::fromUtf8(line); //вывод кириллицы
    }
  • закрыть файл
  • file.close();//закрываем файл

Удаление файла в Qt

    Чтобы удалить документ текстового или иного формата следует:

  • если его еще не существует, то поместить адрес файла в объект класса QFile
  • QFile file("fortext.txt");//указываем относительный путь к файлу
  • переместить документ в корзину методом file.moveToTrash()
  • file.moveToTrash();//удаление файла в корзину

Пример кода для работы с файлами на C++ в Qt

Текстовый файл в Qt

Элементы файла графической программы

    В файле mainwindow.ui путем перетаскивания надо добавить несколько виджетов, используемых в программе:

  • widget class=”QLabel” – 3 эл.
  • widget class=”QLineEdit” – 1 эл.
  • widget class=”QPushButton” – 5 эл.
  • widget class=”QTextEdit” – 1 эл.

Содержимое заголовочного файла mainwindow.h

    В файле mainwindow.h в разделе private slots: прописываем функции для работы с файлами и их содержимым:

  • #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include "QMainWindow"

    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    private:
    Ui::MainWindow *ui;

    private slots:
    void createFile();// это созданный нами слот для проверки существования файла fortext.text и его создания
    void addText(); // это созданный нами слот для внесения текста из поля QLineEdit в текстовый файл
    void retrievetext();//это созданный нами слот для вывода текста из файла
    void plusaddtext();// это созданный нами слот для добавления текста из поля QLineEdit в текстовый файл
    void deleteFile();//это созданный нами слот для удаления файла

    };
    #endif // MAINWINDOW_H


Главный файл программы

Содержимое документа main.cpp можно не менять.


Основной рабочий код программы

    Файл mainwindow.cpp нужно пополнить всеми необходимыми функциями и библиотеками. В итоге он должен выглядеть примерно так:

  • #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "QApplication"

    #include "QLineEdit" //подключает класс для работы с полем для ввода текста
    #include "QPushButton" //подключает класс для работы с кнопками
    #include "QLabel" //подключает класс для работы с полем для показа какой-либо информации,
    #include "QFile" //подключает класс для работы с файлами
    #include "QDebug" //подключает класс для работы с выводом результата в консоль

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(createFile())); //для создания файла при необходимости
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(addText())); //для ввода текста в файл
    connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(retrievetext())); //для вывода текста из файла
    connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(plusaddtext())); //для добавления текста в файл
    connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(deleteFile())); //для удаления файла

    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }

    void MainWindow::createFile()
    {
    //блок создания файла
    //проверяем существует ли файл fortext.text
    if(QFile::exists("fortext.txt"))
    {
    ui->label->setText("Файл существует");
    }
    else{
    ui->label->setText("Файл НЕ существует");
    QFile file("fortext.txt");//создаем объект для файла fortext.txt, но сам файл еще не создан
    file.open(QIODevice::WriteOnly);//создаем файл fortext.txt в папке с исполняемым файлом!
    }
    }

    void MainWindow::addText(){
    //блок внесения текста в файл
    if(QFile::exists("fortext.txt"))
    {
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.open(QIODevice::WriteOnly);//открываем файл fortext.txt, который расположен по умолчанию в папке с компилированными файлами!
    //получаем содержимое поля QLineEdit
    file.write(ui->lineEdit->text().toUtf8().data());
    file.close();//закрываем файл
    }
    else{
    ui->label->setText("Файл НЕ существует");
    }
    }

    void MainWindow::retrievetext()
    {
    //блок получения информации из файла и вывода ее в поле
    //проверяем существует ли файл fortext.text
    if(QFile::exists("fortext.txt"))
    {
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.open(QIODevice::ReadOnly);//открываем файл только для чтения
    ui->textEdit->setText(file.readAll());//выводим все содержимое файла
    file.close();//закрываем файл
    }
    else{
    ui->textEdit->setText("Файл НЕ существует");
    }
    }

    void MainWindow::plusaddtext(){
    //блок добавления текста в файл
    //проверяем существует ли файл fortext.text, если существует покажем в элементе label_2 текст Файл существует, если нет, то Файл НЕ существует
    if(QFile::exists("fortext.txt"))
    {
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.open(QFile::Append |QFile::Text);//открываем файл fortext.txt, для добавления текста в файл
    //получаем содержимое поля QLineEdit
    file.write(ui->lineEdit->text().toUtf8().data());
    file.close();//закрываем файл
    }
    else{
    ui->textEdit->setText("Файл НЕ существует");
    }
    }

    void MainWindow::deleteFile(){
    //блок удаления файла
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.moveToTrash();//удаление файла в корзину
    }

Как работать с текстовыми файлами на Qt

Создание файла в Qt

    При необходимости создать файл для внесения в него данных через C++ на Qt следует:

  • придумать его имя, например fortext.txt
  • в коде программы, например в mainwindow.cpp дописать текст:
    #include "QFile" //подключает класс для работы с файлами
    QFile file("fortext.txt");//создать объект для работы с fortext.txt, который будет помещен в каталог с компилированными файлами проекта, если же нужно другое место в системе, то следует указать весь путь в скобках

Запись в текстовый файл в Qt

    Перед внесением данных в ранее созданный объект file требуется:

  • открыть файл для записи с нуля
  • file.open(QIODevice::WriteOnly);//открываем файл fortext.txt для перезаписи данных, при этом вся предыдущая информация будет удалена!
  • или для добавления информации
  • file.open(QFile::Append |QFile::Text);//открываем файл fortext.txt, для добавления текста, при этом вся предыдущая информация сохранится!
  • внести нужное значение, например вносимый текст
  • file.write("вносимый текст");//записываем в файл значение
  • закрыть файл
  • file.close();//закрываем файл
  • данные должны быть внесены в файл по указанному адресу относительно пути к папке с компилированной программой

Чтение содержимого из файла в Qt

    Чтобы считать данные из ранее созданного текстового документа file надо:

  • подключить класс для вывода данных в консоли Qt
  • #include "QDebug"//подключает класс для работы с выводом результата в консоль
  • открыть указанный документ для чтения
  • file.open(QIODevice::ReadOnly);//открываем файл только для чтения
  • получение информации осуществляется методом file.readAll()

  • Внимание: после срабатывания file.readAll() эти же данные не получится вывести еще раз! Для повторного вывода надо создать еще один объект QFile file1("fortext.txt");


  • для вывода всего содержимого в одну строку используется
  • qDebug() << QString::fromUtf8(file.readAll()); //вывод всего текста в одну строку
  • а для чтения файла построчно применяется
  • while (!file.atEnd()) {
    QByteArray line = file.readLine();
    qDebug() << QString::fromUtf8(line); //вывод кириллицы
    }
  • закрыть файл
  • file.close();//закрываем файл

Удаление файла в Qt

    Чтобы удалить документ текстового или иного формата следует:

  • если его еще не существует, то поместить адрес файла в объект класса QFile
  • QFile file("fortext.txt");//указываем относительный путь к файлу
  • переместить документ в корзину методом file.moveToTrash()
  • file.moveToTrash();//удаление файла в корзину

Пример кода для работы с файлами на C++ в Qt

Текстовый файл в Qt

Элементы файла графической программы

    В файле mainwindow.ui путем перетаскивания надо добавить несколько виджетов, используемых в программе:

  • widget class=”QLabel” – 3 эл.
  • widget class=”QLineEdit” – 1 эл.
  • widget class=”QPushButton” – 5 эл.
  • widget class=”QTextEdit” – 1 эл.

Содержимое заголовочного файла mainwindow.h

    В файле mainwindow.h в разделе private slots: прописываем функции для работы с файлами и их содержимым:

  • #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include "QMainWindow"

    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    private:
    Ui::MainWindow *ui;

    private slots:
    void createFile();// это созданный нами слот для проверки существования файла fortext.text и его создания
    void addText(); // это созданный нами слот для внесения текста из поля QLineEdit в текстовый файл
    void retrievetext();//это созданный нами слот для вывода текста из файла
    void plusaddtext();// это созданный нами слот для добавления текста из поля QLineEdit в текстовый файл
    void deleteFile();//это созданный нами слот для удаления файла

    };
    #endif // MAINWINDOW_H


Главный файл программы

Содержимое документа main.cpp можно не менять.


Основной рабочий код программы

    Файл mainwindow.cpp нужно пополнить всеми необходимыми функциями и библиотеками. В итоге он должен выглядеть примерно так:

  • #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "QApplication"

    #include "QLineEdit" //подключает класс для работы с полем для ввода текста
    #include "QPushButton" //подключает класс для работы с кнопками
    #include "QLabel" //подключает класс для работы с полем для показа какой-либо информации,
    #include "QFile" //подключает класс для работы с файлами
    #include "QDebug" //подключает класс для работы с выводом результата в консоль

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(createFile())); //для создания файла при необходимости
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(addText())); //для ввода текста в файл
    connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(retrievetext())); //для вывода текста из файла
    connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(plusaddtext())); //для добавления текста в файл
    connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(deleteFile())); //для удаления файла

    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }

    void MainWindow::createFile()
    {
    //блок создания файла
    //проверяем существует ли файл fortext.text
    if(QFile::exists("fortext.txt"))
    {
    ui->label->setText("Файл существует");
    }
    else{
    ui->label->setText("Файл НЕ существует");
    QFile file("fortext.txt");//создаем объект для файла fortext.txt, но сам файл еще не создан
    file.open(QIODevice::WriteOnly);//создаем файл fortext.txt в папке с исполняемым файлом!
    }
    }

    void MainWindow::addText(){
    //блок внесения текста в файл
    if(QFile::exists("fortext.txt"))
    {
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.open(QIODevice::WriteOnly);//открываем файл fortext.txt, который расположен по умолчанию в папке с компилированными файлами!
    //получаем содержимое поля QLineEdit
    file.write(ui->lineEdit->text().toUtf8().data());
    file.close();//закрываем файл
    }
    else{
    ui->label->setText("Файл НЕ существует");
    }
    }

    void MainWindow::retrievetext()
    {
    //блок получения информации из файла и вывода ее в поле
    //проверяем существует ли файл fortext.text
    if(QFile::exists("fortext.txt"))
    {
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.open(QIODevice::ReadOnly);//открываем файл только для чтения
    ui->textEdit->setText(file.readAll());//выводим все содержимое файла
    file.close();//закрываем файл
    }
    else{
    ui->textEdit->setText("Файл НЕ существует");
    }
    }

    void MainWindow::plusaddtext(){
    //блок добавления текста в файл
    //проверяем существует ли файл fortext.text, если существует покажем в элементе label_2 текст Файл существует, если нет, то Файл НЕ существует
    if(QFile::exists("fortext.txt"))
    {
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.open(QFile::Append |QFile::Text);//открываем файл fortext.txt, для добавления текста в файл
    //получаем содержимое поля QLineEdit
    file.write(ui->lineEdit->text().toUtf8().data());
    file.close();//закрываем файл
    }
    else{
    ui->textEdit->setText("Файл НЕ существует");
    }
    }

    void MainWindow::deleteFile(){
    //блок удаления файла
    QFile file("fortext.txt");//указываем файл fortext.txt
    file.moveToTrash();//удаление файла в корзину
    }