русс | укр

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

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

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

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


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

Наполнение действий по форматированию функциональностью


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


Начнем с самых простых: Отменить, Повторить, Вырезать, Копировать, Вставить. Если Вы были внимательны, то заметили, что «магические» комбинации клавиш связанные с этими операциями уже работают, не работают лишь кнопки – подключим их.

Следует повторить действия, которые вы осуществляли для подключения кнопки Выход: откройте вкладку редактор сигналов и слотов и, например, последовательно выберете: action_Cut, triggered(), textEdit, cut(). Нечто подобное совершите и для остальных действий. Вот так это все выглядело бы в программном коде:

connect(action_Undo, SIGNAL(triggered()), textEdit, SLOT(undo()));

connect(action_Redo, SIGNAL(triggered()), textEdit, SLOT(redo()));

connect(action_Cut, SIGNAL(triggered()), textEdit, SLOT(cut()));

connect(action_Copy, SIGNAL(triggered()), textEdit, SLOT(copy()));

connect(action_Paste, SIGNAL(triggered()), textEdit, SLOT(paste()));

Пожалуй, также следует проверять: должны ли эти кнопки быть доступны:

connect(textEdit, SIGNAL(copyAvailable(bool)), actionCut, SLOT(setEnabled(bool)));

connect(textEdit, SIGNAL(copyAvailable(bool)), actionCopy, SLOT(setEnabled(bool)));

connect(textEdit, SIGNAL(undoAvailable(bool)), actionUndo, SLOT(setEnabled(bool)));

connect(textEdit, SIGNAL(redoAvailable(bool)), actionRedo, SLOT(setEnabled(bool)));

Теперь уберем галочку enable с действий Отменить, Повторить, Вырезать, Копировать, дабы они не были доступны нам изначально.

А для действия Вставить пропишите в конструкторе:

#ifndef QT_NO_CLIPBOARD

if (const QMimeData *md = QApplication::clipboard()->mimeData())

actionPaste->setEnabled(md->hasText());

#endif

Правда, чтобы этот код заработал, следует подключить:

#include <QClipboard>

#include <QMimeData>

Все. Первые пять инструментов мы подключили. Протестируйте приложение.



 

Теперь приступим к работе над пунктами Жирный, Курсив, Подчеркнутый. Создадим ряд своих процедур: выберем действие action_Bold, кликнем правой кнопкой мыши и выберем Перейти к слоту… Тоже самое повторите для остальных действий.

void MainWindow::on_action_Bold_triggered()

{

QTextCharFormat fmt;

fmt.setFontWeight(ui->action_Bold->isChecked() ? QFont::Bold : QFont::Normal);

mergeFormatOnWordOrSelection(fmt);

}

void MainWindow::on_action_Italic_triggered()

{

QTextCharFormat fmt;

fmt.setFontItalic(ui->action_Italic->isChecked());

mergeFormatOnWordOrSelection(fmt);

}

void MainWindow::on_action_Underline_triggered()

{

QTextCharFormat fmt;

fmt.setFontUnderline(ui->action_Underline->isChecked());

mergeFormatOnWordOrSelection(fmt);

}

Как видно, стоит дописать еще одну процедуру:

void MainWindow::mergeFormatOnWordOrSelection(const QTextCharFormat &format)

{

QTextCursor cursor = ui->textEdit->textCursor();

if (!cursor.hasSelection()) cursor.select(QTextCursor::WordUnderCursor);

cursor.mergeCharFormat(format);

ui->textEdit->mergeCurrentCharFormat(format);

}

И я думаю, Вы же не забудете описать ее в классе и подключить необходимые модули:

#include <QTextCharFormat>

void mergeFormatOnWordOrSelection(const QTextCharFormat &format);

Это интересно. Попробуйте также вставить в процедуру подчеркивания строчку: fmt.setFontOverline(ui->action_Underline->isChecked());

 

Запустите. Форматирование будет работать, правда, не совсем правильно.

 

Рис. 3.15. Добавление действиям свойства триггерности

Теперь займемся пунктами Влево, По центру, Вправо, По ширине – повторите действия описанные выше, но уже для этих пунктов.

void MainWindow::on_action_Left_triggered()

{

ui->textEdit->setAlignment(Qt::AlignLeft | Qt::AlignAbsolute);

}

void MainWindow::on_action_Center_triggered()

{

ui->textEdit->setAlignment(Qt::AlignHCenter);

}

void MainWindow::on_action_Right_triggered()

{

ui->textEdit->setAlignment(Qt::AlignRight | Qt::AlignAbsolute);

}

void MainWindow::on_action_Justify_triggered()

{

ui->textEdit->setAlignment(Qt::AlignJustify);

}

Им, как и предыдущим действиям, также следует задать свойство – триггерное, а также дописать процедуру, которая проверяет и устанавливает это свойство в зависимости от выбранного выравнивания:

void MainWindow::alignmentChanged(Qt::Alignment a){ if (a & Qt::AlignLeft) { ui->action_Left->setChecked(true); ui->action_Center->setChecked(false); ui->action_Right->setChecked(false); ui->action_Justify->setChecked(false); } else if (a & Qt::AlignHCenter) { ui->action_Left->setChecked(false); ui->action_Center->setChecked(true); ui->action_Right->setChecked(false); ui->action_Justify->setChecked(false); } else if (a & Qt::AlignRight) { ui->action_Left->setChecked(false); ui->action_Center->setChecked(false); ui->action_Right->setChecked(true); ui->action_Justify->setChecked(false); } else if (a & Qt::AlignJustify) { ui->action_Left->setChecked(false); ui->action_Center->setChecked(false); ui->action_Right->setChecked(false); ui->action_Justify->setChecked(true); }

}

Ее следует вызвать в конструкторе:

alignmentChanged(ui->textEdit->alignment());

а также не забыть прописать в классе:

void alignmentChanged(Qt::Alignment a);

еще допишем ее во все 4 действия для работы с выравниванием, к примеру:

void MainWindow::on_action_Left_triggered()

{

ui->textEdit->setAlignment(Qt::AlignLeft | Qt::AlignAbsolute);

alignmentChanged(ui->textEdit->alignment());

}

Как вы, должно быть, догадываетесь это еще не все. =)

Следить за состоянием триггерных действий мы должны динамически в зависимости от позиции курсора и текста под ним:

void MainWindow::currentCharFormatChanged(const QTextCharFormat &format)

{

fontChanged(format.font());

// colorChanged(format.foreground().color());

}

void MainWindow::cursorPositionChanged()

{

alignmentChanged(ui->textEdit->alignment());

}

void MainWindow::fontChanged(const QFont &f)

{

ui->action_Bold->setChecked(f.bold());

ui->action_Italic->setChecked(f.italic());

ui->action_Underline->setChecked(f.underline());

}

В конструкторе необходимо дописать:

connect(ui->textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), this, SLOT(currentCharFormatChanged(QTextCharFormat)));

connect(ui->textEdit, SIGNAL(cursorPositionChanged()), this, SLOT(cursorPositionChanged()));

Также сделаем вызовы в конструкторе для шрифта и цвета:

fontChanged(ui->textEdit->font());

// colorChanged(ui->textEdit->textColor());

Естественно процедуры необходимо описать в классе (в секции private):

void cursorPositionChanged();

void fontChanged(const QFont &f);

(в секции private slots):

void currentCharFormatChanged(const QTextCharFormat &format);



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


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


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

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

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


 


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

 
 

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

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