Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "texteditor.h"
- #include "ui_texteditor.h"
- #include <QDebug>
- TextEditor::TextEditor(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::TextEditor)
- {
- ui->setupUi(this);
- ui->all_save->setEnabled(false);
- configElements(false);
- }
- TextEditor::~TextEditor()
- {
- delete ui;
- }
- // Открытия файлы
- void TextEditor::on_openFileButton_clicked()
- {
- // Получаем имя файла для открытия: открывается диалоговое окно, которое разрешает выбрать только текстовые (txt) файлы
- QString filename = QFileDialog::getOpenFileName(this, tr("Выберите файл"), QDir::currentPath(), tr("Text files (*.txt)"));
- // Проверка, если мы выбрали какой-либо файл, или его название (т.е название - длина не равна нулю)
- if (QString::compare(filename, QString()) != 0) {
- // Создаем файл файла
- QFile textFile(filename);
- // Открытие файла (проверка на возможность что-то считать оттуда)
- if (!textFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- qDebug() << "Ошибка открытия файла";
- return;
- }
- textFileName = filename;
- // Файл открылся, происходит построчное считывание
- // counter - счетчик строк (записей)
- int counter = 0;
- QTextStream textStream(&textFile);
- while (!textStream.atEnd()) {
- counter++;
- linesStringList << textStream.readLine();
- }
- textFile.close();
- // В переменные записываем, сколько всего строк
- // и говорим, что текущая строка == 1 (мы находимся на первой строке)
- countLines = counter;
- currentLine = 1;
- ui->count_lines->setText("Студентов в базе данных: " + QString::number(countLines));
- ui->current_line->setText("Текущий студент: " + QString::number(currentLine));
- // Вызываем функцию, которая делает доступным нажатие элекментов (после того как загрузился файл)
- configElements(true);
- on_read_first_line_clicked();
- }
- }
- /////////////////////////////
- /// Чтение строк
- // Чтение следующей строки
- void TextEditor::on_read_next_line_clicked()
- {
- if (currentLine == linesStringList.count()) {
- QMessageBox messageBox;
- messageBox.critical(0,"Ошибка!","Следующей записи нет. \nВы находитесь в конце.");
- messageBox.setFixedSize(500,200);
- return;
- }
- currentLine += 1;
- showLine(currentLine);
- }
- // Чтение предыдущей строки
- void TextEditor::on_read_prev_line_clicked()
- {
- if (currentLine == 1) {
- QMessageBox messageBox;
- messageBox.critical(0,"Ошибка!","Предыдущей записи нет. \nВы находитесь в начале.");
- messageBox.setFixedSize(500,200);
- return;
- }
- currentLine -= 1;
- showLine(currentLine);
- }
- // Чтение первой строки
- void TextEditor::on_read_first_line_clicked()
- {
- currentLine = 1;
- showLine(currentLine);
- }
- // Чтение последней строки
- void TextEditor::on_read_last_line_clicked()
- {
- currentLine = linesStringList.count();
- showLine(currentLine);
- }
- /////////////////////////////
- /// Изменение строк
- ///
- // Изменение строки
- void TextEditor::on_change_cur_line_clicked()
- {
- // Изменение строки - делаю поля допустиимыми для редактирования
- ui->firstname_lineEdit->setReadOnly(false);
- ui->lastname_lineEdit->setReadOnly(false);
- ui->group_lineEdit->setReadOnly(false);
- ui->all_save->setEnabled(true);
- }
- // Удаление текущей строки
- void TextEditor::on_delete_cur_line_clicked()
- {
- showLine(currentLine - 1);
- linesStringList.removeAt(currentLine - 1);
- ui->count_lines->setText("Студентов в базе данных: " + QString::number(--countLines));
- QFile file(textFileName);
- if (file.open(QIODevice::ReadWrite)) {
- QTextStream stream(&file);
- for (QStringList::Iterator it = linesStringList.begin(); it != linesStringList.end(); ++it)
- stream << *it << "\n";
- }
- file.close();
- }
- // Добавление нового студента
- void TextEditor::on_addStudentButton_clicked()
- {
- // Если хоть одно поле не заполнено, показывается диалог с ошибкой
- if (ui->nameLine->text().isEmpty() || ui->surnameLine->text().isEmpty() || ui->addCourseLine->text().isEmpty()) {
- QMessageBox messageBox;
- messageBox.critical(0,"Ошибка!","Заполните все поля");
- messageBox.setFixedSize(500,200);
- return;
- }
- QString newStudent = ui->nameLine->text() + " " +
- ui->surnameLine->text() + " - " +
- ui->addCourseLine->text();
- linesStringList.append(newStudent);
- ui->count_lines->setText("Студентов в базе данных: " + QString::number(++countLines));
- on_all_save_clicked();
- }
- /////////////////////////////
- /// Остальные методы
- ///
- // Открыть полностью текст в отдельном окне
- void TextEditor::on_open_text_clicked()
- {
- // Создание диалогового окна, куда поместится файлик с записями
- QTextBrowser *browser = new QTextBrowser;
- QString text;
- for (QString string : linesStringList) {
- text.append(string + "\n");
- }
- browser->setText(text);
- browser->show();
- }
- // Отображение записи
- void TextEditor::showLine(int number) {
- // В функцию приходит номер, который нужно отобразить
- // По номеру (индексу) достаем из массива нужного студента.
- // Методом split делим его запись на 3 строки (Иван Иванов Матан)
- // Первые 2 строки - Имя Фамилия, Последняя строка - направление
- QStringList splitStrings = linesStringList[number - 1].split(" - ");
- QStringList students = splitStrings[0].split(" ");
- // Здесь как раз и устанавливаются значения этих строк в окна
- ui->firstname_lineEdit->setText(students[0]);
- ui->lastname_lineEdit->setText(students[1]);
- ui->group_lineEdit->setText(splitStrings[1]);
- ui->current_line->setText("Текущий студент: " + QString::number(number));
- disableTextField();
- }
- // Сохранить все изменения
- void TextEditor::on_all_save_clicked()
- {
- disableTextField();
- linesStringList[currentLine - 1] =
- ui->firstname_lineEdit->text() + " " +
- ui->lastname_lineEdit->text() + " - " +
- ui->group_lineEdit->text();
- QFile file(textFileName);
- if (file.open(QIODevice::ReadWrite)) {
- QTextStream stream(&file);
- for (QStringList::Iterator it = linesStringList.begin(); it != linesStringList.end(); ++it)
- stream << *it << "\n";
- }
- file.close();
- }
- // Выход из программы
- void TextEditor::on_exit_clicked()
- {
- qApp->exit();
- }
- void TextEditor::configElements(bool isActive)
- {
- ui->read_next_line->setEnabled(isActive);
- ui->read_prev_line->setEnabled(isActive);
- ui->read_first_line->setEnabled(isActive);
- ui->read_last_line->setEnabled(isActive);
- ui->change_cur_line->setEnabled(isActive);
- ui->delete_cur_line->setEnabled(isActive);
- ui->addStudentButton->setEnabled(isActive);
- ui->open_text->setEnabled(isActive);
- ui->nameLine->setReadOnly(!isActive);
- ui->surnameLine->setReadOnly(!isActive);
- ui->addCourseLine->setReadOnly(!isActive);
- }
- void TextEditor::disableTextField() {
- ui->firstname_lineEdit->setReadOnly(true);
- ui->lastname_lineEdit->setReadOnly(true);
- ui->group_lineEdit->setReadOnly(true);
- ui->all_save->setEnabled(false);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement