Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornyy_praktikum_po_programmirovaniyu_v_s...doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
1.4 Mб
Скачать

Пример 2: программа, которая считывает текст из файла и поло­вину строк переписывает в другой файл; используются специаль­ные окна для работы с файлами.

Создайте проект на основе класса QMainWindow, добавьте меню с команда­ми «Открыть файл», «Сохранить файл» и «Выход». Свяжите сигнал triggered() кнопки «Выход» со слотом close() главного окна (см. пример 1).

Объявите в классе MainWindow файл и счетчик строк:

QFile file;
int counter;
В начало файла mainwindow.h вставьте подключение заголовочного файла:
#include <QFile>
Перейдите в файл mainwindow.cpp и подключите заголовочные файлы:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QTextCodec>
#include <QTextStream>
В конструкторе задайте кодировку, обеспечивающую использование кирил­лицы:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
QTextCodec* codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForCStrings(codec);
}
MainWindow::~MainWindow()
{
    delete ui;
}

Создайте слот для команды actionOpen:

void MainWindow::on_actionOpen_triggered()
{
    QString fileName = QfileDialog::getOpenFileName(
this,  // указатель на родительское окно
"Открыть файл", // заголовок окна
 QString(), // выбор начинается с текущего каталога
 QString("Текстовые файлы (*.txt);;Все файлы (*.*)") ); 
// фильтры для списка файлов 
    if (!fileName.isEmpty()) // если имя файла выбрано 
    {
        file.setFileName(fileName); 
// связываем объект file с физическим файлом
        file.open(QIODevice::ReadOnly|QIODevice::Text);
 // открываем файл для чтения
        QString text = "Файл " + fileName + ": \n"; 
// выводим название файла
        QString line; // строка для чтения файла
        counter = 0; 
        while (!file.atEnd()) // пока файл не закончен
        {
            line = file.readLine(); // считываем строку из файла
            counter++; // увеличиваем счетчик строк
            text += line; // добавляем строку к тексту
        }
        QString tmp; // вспомогательная строка для отображения результата
        tmp = Qstring(
"\nКоличество строк в файле %1 \n").arg(counter);
        text += tmp; // добавляем результат к выводимому тексту
        ui->textEdit->setText(text); // отображаем текст на экране
    }
}

Создайте слот для команды actionSave:

void MainWindow::on_actionSave_triggered()
{
    QString fileName = QFileDialog::getSaveFileName(this, "Сохранить файл", Qstring(), 
QString("Текстовые файлы (*.txt);;Все файлы (*.*)") ); 
// используем окно для задания имени сохраняемого файла
    QFile rezFile; // Результирующий файл
    if (!fileName.isEmpty()) // Если имя файла задано
    {
        QString line; // строка из файла
        if (file.isOpen()) // если исходный файл открыт
        {
            file.seek(0); // переходим в начало файла
            rezFile.setFileName(fileName); 
// присваиваем физическое имя результирующему файлу
            rezFile.open(QIODevice::WriteOnly|QIODevice::Text); 
// открываем сохраняемый файл 
            QTextStream out(&rezFile); 
/* создаем поток, связанный с файлом (запись файла обычно выполняется с помощью потока) */
            for (int i = 1; i <= counter/2; ++i) 
// отсчитываем половину строк
            {
                line = file.readLine(); 
// считываем строку из исходного файла
                out << line; // записываем в результирующий файл
            }
            rezFile.close(); // закрываем создаваемый файл
            rezFile.open(QIODevice::ReadOnly|QIODevice::Text);
 // открываем сохраненнный файл для чтения 
            QString text = rezFile.readAll();
 // считываем результирующий файл
            ui->textEdit->setText(text); 
// выводим полученный файл на экран
        }
    }
    else ui->textEdit->setText("Файл не сохранен");
}
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]