- •Содержание
- •Лабораторная работа № 1 Тема: «Знакомство со средой Qt creator. Простые диалоговые приложения»
- •Пример 1: Программа, вычисляющая вещественный остаток от деления двух вещественных чисел
- •Пример 2: Программа, которая находит квадратный корень числа.
- •Пример 3: Программа, которая иллюстрирует использование стандартных сигналов и слотов.
- •Пример 4: Программа, которая вычисляет значение арифметического выражения
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 2 Тема: «Отладка программы»
- •Задания для самостоятельного выполнения
- •Пошаговое выполнение программы
- •Пример 2: программа, которая выводит значения функции на заданном отрезке с помощью списка listWidget
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 4 Тема: «Работа со строками» п ример 1: программа, которая переводит число из 16-ой системы в 10-ую. При вводе выполняется проверка вводимых символов.
- •Пример 2: программа, которая считывает строку символов, состоящую из русских букв, запятых и пробелов и выводит на экран множество символов этой строки.
- •Пример 3: программа, которая считывает текст из элемента tetxEdit и выводит в столбик числа, содержащиеся в тексте с помощью другого элемента типа textEdit.
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 5 Тема: «Главные окна. Меню. Работа с файлами» Пример 1: программа, которая считывает текст из файла и выводит его в главном окне; используется файл ресурсов.
- •Пример 2: программа, которая считывает текст из файла и половину строк переписывает в другой файл; используются специальные окна для работы с файлами.
- •Пример 3: программа, которая считывает текст из файла и подсчитывает количество видимых символов и количество русских букв.
- •Задания для самостоятельного выполнения
- •Пример 2: программа, в которой используется область отсечения qRegion и котекстное меню для выбора способа заливки этой области.
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 7
- •Пример 1: программа, которая рисует траектории движения мыши при нажатой левой кнопке выбранным цветом и стирает рисунок при щелчке правой кнопкой мыши.
- •Пример 2: программа, которая рисует окружности с помощью мыши (окружность видима в процессе построения). Нарисованные окружности можно сохранить в файле и загрузить из файла.
- •Задания для самостоятельного выполнения
- •Задания для самостоятельного выполнения
- •Задания для самостоятельного выполнения
Пример 3: программа, которая считывает текст из файла и подсчитывает количество видимых символов и количество русских букв.
Создайте проект на основе класса QMainWindow, добавьте меню с командами «Открыть файл» и «Выход». Свяжите сигнал triggered() кнопки «Выход» со слотом close() главного окна (см. пример 1).
Подключите заголовочные файлы:
#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()) // если имя файла выбрано
{
QFile file;
file.setFileName(fileName);
// связываем объект file с физическим файлом
file.open(QIODevice::ReadOnly|QIODevice::Text);
// открываем файл для чтения
QFileInfo fi(fileName);
// объект, который хранит информацию о файле
QString name = fi.fileName();
// получаем чистое имя файла (без пути)
QString text; // здесь будет храниться текст файла
QChar sym; // один символ из файла
QTextStream in(&file); // поток для чтения файла
int counter = 0; // счетчик символов
while (!in.atEnd()) // пока поток не закончен
{
in >> sym; // считываем символ
if (sym.isPrint()) counter++;
/* если это видимый (печатный) символ, увеличиваем счетчик (пробелы относятся к печатным символам) */
text += sym; // добавляем символ к тексту
}
QString tmp1 = QString("Количество видимых символов = %1 \n").arg(counter); // строка для вывода количества символов
counter = text.count(QRegExp("[А-Яа-я]"));
// подсчитываем количество русских букв
QString tmp2 = QString("Количество русских букв = %1\n").arg(counter); // строка для вывода количества русских букв
text += tmp1;
text += tmp2;
text = "Файл " + name + ": \n\n" + text; // заголовок
ui->textEdit->setText(text); // вывод результата
}
}Создайте текстовый файл для проверки работы программы (см. пример 1).
Запустите программу и проверьте ее работу.
Пример 4: программа, которая считывает текст из файла и переписывает в другой файл строки, заменяя одну последовательность символов на другую; cимволы задают с помощью специального диалогового окна, появляющегося при нажатии кнопки на панели инструментов.
Создайте проект на основе класса QMainWindow, добавьте меню с командами «Открыть файл», «Сохранить файл» и «Выход». Свяжите сигнал triggered() кнопки «Выход» со слотом close() главного окна (см. пример 1). Подключите иконки к действиям и создайте три кнопки на панели инструментам, соответствующие командам меню.
Найдите файл с какой-нибудь иконкой (*.png), которую Вы будете использовать для кнопки, при нажатии на которую будет появляться диалоговое окно. Скопируйте этот файл в папку Вашего проекта и добавьте его в ресурсы.
В качестве примера создадим кнопку «Задание», которая будет присутствовать только на панели инструментов, не имея аналога в меню.
В
окне Action Editor нажмите кнопку New.
О
ткроется
окно для задания свойств нового действия
(action). Задайте свойства как показано на
рисунке.
Подключите иконку к кнопке.
Нажмите <OK>.
Перетащите иконку нового действия на панель инструментов. Теперь в меню должно быть 3 команды, а на панели инструментов - 4.
Накройте рабочую поверхность окна элементом textEdit.
Добавьте слот для кнопки «Открыть файл» и внесите в него код как показано ниже:
void MainWindow::on_actionOpen_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this, "Открыть файл", Qstring(), QString("Текстовые файлы (*.txt);;Все файлы (*.*)" )); // получаем имя файла
QFile file; // объявляем объект для работы с файлом
if (!fileName.isEmpty()) // если имя файла выбрано
{
file.setFileName(fileName);
// связываем объект с физическим файлом
file.open(QIODevice::ReadOnly|QIODevice::Text);
// открываем файл
QFileInfo fi(fileName); // объект, содержащий информацию о файле
QString name = fi.fileName(); // получаем чистое имя файла
ui->textEdit->setText( "Файл " + name + ": \n");
// выводим заголовок
text = file.readAll(); // считываем текст файла
ui->textEdit->append(text); // выводим текст файла в окно
}
}Теперь добавим новое диалоговое окно (вместе с классом, который его описывает). Для этого выберите в меню Qt Creator команду File|New File or Progect и в появившемся окне выберите Qt | Qt Designer Form Class.
Появится окно, в котором нужно выбрать шаблон диалогового окна. Выберите один из двух шаблонов с кнопками, например: Dialog with Buttons Right. Кнопка <OK> нужна обязательно, мы будем проверять, была ли она нажата. Нажмите <Next>.
В следующем окне нужно задать имя класса, который будет описывать диалоговое окно, и имена файлов, которые будут содержать описание класса. Оставьте предложенные имена и нажмите <Next>.
Спроектируйте окно как показано на рисунке. Для ввода последовательностей символов используйте элементы lineEdit.
Для того, чтобы получить символы, которые будет вводить пользователь в диалоговом окне, нам нужно в классе Dialog, который описывает диалоговое окно, предусмотреть функции, которые будут предоставлять доступ к этим последовательностям символов. В файле dialog.h объявите функции:
QString GetOld(); // символы, которые нужно заменить
QString GetNew(); // символы, на которые нужно заменить
В файле dialog.cpp определим эти функции:
QString Dialog::GetOld()
{
return ui->lineEdit->text();
}
QString Dialog::GetNew()
{
return ui->lineEdit_2->text();
}В окне Action Editor перейдите к слоту для действия actionTask и внесите в слот код, показанный ниже:
void MainWindow::on_actionTask_triggered()
{
Dialog dlg; // объект, соответствующий диалоговому окну
dlg.move(420,220); // определяем положение окна на экране
if(dlg.exec()==QDialog::Accepted)
// выводим окно на экран и если была нажата кнопка <OK>
{
text.replace(dlg.GetOld(), dlg.GetNew()); // заменяем символы
ui->textEdit->setText(text);
// выводим отредактированный текст на экран
}
}В окне Action Editor перейдите к слоту для действия actionSave и внесите в слот код, показанный ниже:
void MainWindow::on_actionSave_triggered()
{
QString fileName = QFileDialog::getSaveFileName(this, "Сохранить файл", Qstring(), QString("Текстовые файлы (*.txt);;Все файлы (*.*)") ); // определяем имя, под которым нужно сохранить файл
QFile rezFile; // объявляем объект, соответствующий новому файлу
if (!fileName.isEmpty()) // если имя файла задано
{
rezFile.setFileName(fileName); // связываем объект и файл
rezFile.open(QIODevice::WriteOnly|QIODevice::Text);
// открываем файл
QTextStream out(&rezFile); // создаем поток для работы с файлом
out << text; // переписываем текст в файл
rezFile.close(); // обязательно закрываем созданный файл
rezFile.open(QIODevice::ReadOnly|QIODevice::Text);
// открываем файл для чтения
text = rezFile.readAll(); // считываем текст из файла
ui->textEdit->setText("Новый файл:\n"); // выводим заголовок
ui->textEdit->append(text); // выводим текст нового файла
}
else ui->textEdit->setText("Файл не сохранен");
}
