русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Редактирование действий


Дата добавления: 2015-07-04; просмотров: 1802; Нарушение авторских прав


1. Если вы внимательно посмотрите вниз экрана, то обнаружите, что там появились так называемые Действия (Action) – реакции на нажатие соответствующих пунктов меню.

 

2. Давайте модифицируем их, заменив названия на более осмысленные, например, action_New, action_Open, action_Save, action_Save_as и action_Quit, а также добавим к ним горячие комбинации клавиш. Делается это просто: в окне редактирования действия (чтоб попасть в него дважды щелкните на самом действии) нажмите: Ctrl+N, Ctrl+O, Ctrl+S, Ctrl+Q для соответствующих действий.

Это важно: вводите наименования действий внимательно, например, не стоит случайно ставить в нем пробел в конце (это не так просто заметить).

Рис. 3.6. Окно редактирования действия

 

3. Для того чтобы сделать меню более привлекательным добавим к каждому действию свою иконку, а чтоб иконкам было где жить, создадим файл ресурсов.

 

Рис. 3.7. Добавление нового файла в проект

Рис. 3.8. Создание файла ресурсов

Нас попросят ввести его имя (рекомендую использовать имя проекта, в данном случае QReader, но это остается на вашем усмотрении), а также размещение ресурсного файла (в принципе его можно разместить где угодно, но опять же лучше расположить его в директории проекта, что услужливо рекомендует программа). Нажмите Далее и Завершить.

Теперь дважды щелкните на QReader.qrc (если вы так назвали файл) на боковой панели. Теперь нажмите на кнопку Добавить и выберите Добавить префикс. Можете поменять название префикса на более осмысленное.

 

Рис. 3.9. Добавление префиксов и файлов в ресурсный файл

 

Сейчас нам следует найти (или самим создать) файлы, которые мы будем использовать в качестве иконок. Размеры иконок должны быть 32х32. Рекомендую взять файлы из «<Путь установки Qt>\<№ версии Qt>\ \mingw48_32\examples\widgets\mainwindows\application\images», либо из «\\K105\labpract\Qt\Pictures\images». Добавьте их в ресурсный файл.



Советую переместить файлы изображений в каталог с программой и поместить их, например, в созданную вами папку «images».

 

Снова вернемся в окно редактирования формы и зададим иконки для всех действий. Сделать это можно через Окно редактирования действия (рис. 3.6), либо через окно редактирования свойств (рис. 3.10). Таким образом, задайте иконки для всех пунктов меню.

 

Рис. 3.10. Окно редактирования свойств действия

Рис. 3.11. Выбор иконок для пунктов меню

 

3. Рядом с редактором действий есть редактор сигналов и слотов перейдем в него и последовательно выберем: action_Quit, triggered(), MainWindow, close(). Теперь по нажатию на пункт меню Выход главное окно приложения закроется.

 

4. Добавим на главное окно элемент Text Edit (он находиться в разделе Input Widgets). Назовем его «textEdit».

Дабы окошко с текстом масштабировалось вместе с приложением, необходимо настроить его компоновку.

 

5. Начнем работать с файлами. Создадим свою процедуру для открытия файла: выберите действие action_Open, кликните правой кнопкой мыши и выберите Перейти к слоту…

 

Рис. 3.12. Привязка сигналов и слотов

В открывшемся диалоговом окне выберите сигнал triggered() и нажмите ОК. Вы попадете в окно редактирования программного кода, здесь стоит написать то, что произойдет при выборе пункта меню Открыть.

 

6. Займемся написанием программного кода.

Добавим в эту функцию следующий код:

void MainWindow::on_action_Open_triggered(){ QString fileName = QFileDialog::getOpenFileName(this); if (!fileName.isEmpty()) loadFile(fileName);}

Нам приходиться дописать еще пару своих функций – первая устанавливает имя файла, с которого идет чтение, вторая собственно и читает из файла:

void MainWindow::setCurrentFileName(const QString &fileName)

{

this->fileName = fileName;

ui->textEdit->document()->setModified(false);

QString shownName;

if (fileName.isEmpty())

shownName = "untitled.txt";

else

shownName = QFileInfo(fileName).fileName();

setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Rich Text")));

setWindowModified(false);

}

 

 

void MainWindow::loadFile(const QString &fileName)

{

if (!QFile::exists(fileName))

{

QMessageBox::warning(this, tr("Application"),

tr("Cannot find file %1:\n%2.")

.arg(fileName));

return;

}

QFile file(fileName);

if (!file.open(QFile::ReadOnly))

{

QMessageBox::warning(this, tr("Application"),

tr("Cannot open file %1:\n%2.")

.arg(fileName));

return;

}

#ifndef QT_NO_CURSOR

QApplication::setOverrideCursor(Qt::WaitCursor); //делаем курсор "часики"

#endif

QByteArray data = file.readAll();

QTextCodec *codec = Qt::codecForHtml(data);

QString str = codec->toUnicode(data);

if (Qt::mightBeRichText(str)) ui->textEdit->setHtml(str);

else {

str = QString::fromLocal8Bit(data);

ui->textEdit->setPlainText(str);

}

 

setCurrentFileName(fileName);

#ifndef QT_NO_CURSOR

QApplication::restoreOverrideCursor(); //восстанавливаем обычный курсор

#endif

statusBar()->showMessage(tr("File loaded"), 2000);

}

Следует не забыть добавить описание заголовков этих методов в класс (файл mainwindow.h):

private:

void loadFile(const QString &fileName);

void setCurrentFileName(const QString &fileName);

и одного атрибута:

private:

QString fileName;

да и не забыть подключить заголовочные файлы:

#include <QFileDialog>

#include <QTextCodec>

#include <QMessageBox>

#include <QTextStream>

а еще вызвать одну из процедур в конструкторе нашего главного класса:

setCurrentFileName(QString());

Все! На данном этапе у нас готов простенький просмотрщик текстовых файлов. Проверьте работоспособность приложения.

 

7. Для того чтоб наш просмотрщик стал простеньким текстовым редактором следует добавить возможность сохранения файла. Для этого повторите пункт 5, но только для действий action_Save и action_Save_as.

 

8. Дописываемый код будет выглядеть следующим образом:

void MainWindow::on_action_Save_triggered(){ if (fileName.isEmpty()) { on_action_Save_as_triggered(); return; } QTextDocumentWriter writer(fileName); bool success = writer.write(ui->textEdit->document()); if (success) ui->textEdit->document()->setModified(false);}void MainWindow::on_action_Save_as_triggered(){ QString fn = QFileDialog::getSaveFileName(this, tr("Save as..."), QString(), tr("ODF files (*.odt);;HTML-Files (*.htm *.html);;All Files (*)")); if (fn.isEmpty()) return; if (! (fn.endsWith(".odt", Qt::CaseInsensitive) || fn.endsWith(".htm", Qt::CaseInsensitive) || fn.endsWith(".html", Qt::CaseInsensitive)) ) fn += ".odt"; // default setCurrentFileName(fn); on_action_Save_triggered();}

Нам необходимо добавить еще один заголовочный файл:

#include <QTextDocumentWriter>

а еще изменить процедуру открытия файла:

void MainWindow::on_action_Open_triggered(){ if (maybeSave()) { QString fileName = QFileDialog::getOpenFileName(this);// Здесь стоит написать Ваши собственные поля метода!!! if (!fileName.isEmpty()) loadFile(fileName); }}

Как видим, здесь нам следует проверить стоит ли сохранять файл:

bool MainWindow::maybeSave(){ if (!ui->textEdit->document()->isModified()) return true; if (fileName.startsWith(QLatin1String(":/"))) return true; QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("Application"), tr("The document has been modified.\n" "Do you want to save your changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); if (ret == QMessageBox::Save) { on_action_Save_triggered(); return true; } else if (ret == QMessageBox::Cancel) return false; return true;}

Не забудьте дописать в заголовочный файл в секцию private:

bool maybeSave();

 

9. Давайте еще добавим простенькую функцию создания нового файла. Для этого повторите пункт 5, но только для действия action_New.

 

10. Дописываемый код будет выглядеть следующим образом:

void MainWindow::on_action_New_triggered()

{

if (maybeSave())

{

ui->textEdit->clear();

setCurrentFileName(QString());

}

}

 

11. Укажем программе, кто здесь главный! Напишите в конструкторе:

setCentralWidget(ui->textEdit);

ui->textEdit->setFocus();

 

Рис. 3.13. Результат – простой текстовый редактор без поддержки форматирования

 

На данном этапе мы можем открывать обычные текстовые файлы, их редактировать и сохранять.

 

На последок, чтоб украсить – подключите к Вашему ПО иконку, как для главного окна, так и для исполняемого файла (см. подраздел 2.3).




<== предыдущая лекция | следующая лекция ==>
Создание меню | Добавление средств форматирования в текстовый редактор


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.113 сек.