КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример программы формирования графического изображения
/** @mainpage Формирование элементарных графических изображений В примере показано создание приложения, которое формирует элементарное графическое изображение с ипользованием некоторых возможностей библиотеки Qt - классов QPainter и QPainterPath. @file main.cpp @brief Запуск приложения. @details Создается окно из класса Painter. Производится запуск цикла обработки сообщенией. */ #include <QApplication> #include "painter.h"
int main(int argc, char *argv[]) { QApplication app(argc, argv); Painter painter; painter.show(); return app.exec(); }
/** @file painter.h @brief Декларация классов программы. */ #include <QWidget>
class RenderArea; /** @class Painter @brief Главное окно приложения. @details Обеспечивает формирование окна приложения, содержащего область отображения рисунка и кнопку выхода */ class Painter: public QWidget { Q_OBJECT
public: Painter();
protected: RenderArea * m_RenderArea; ///< Область отображения рисунка. };
/** @class RenderArea @brief Область отображения рисунка. @details Формирует, запоминает и отображает набор графических примитивов */ class RenderArea: public QWidget { Q_OBJECT
public: RenderArea(QWidget *parent = 0);
/// @brief Минимальный размер области отображения /// @details Изменение размеров окна приложения производится с учетом /// допустипых размеров всех элементов. Функция обеспечивает корректное /// отображение области графических примитивов /// @return Допустимые минимальные размеры QSize minimumSizeHint() const;
/// @brief Размер области отображения по умолчанию /// @details При создании окна автоматически рассчитываются размеры /// по указанным рекомендованным размерам всех элементов. /// @return рекомендованные размеры QSize sizeHint() const;
protected: /// @brief Обработчик события перерисовки virtual void paintEvent(QPaintEvent * event); private: QPainterPath m_Path; ///< Шаблон отображения графических примитивов.
};
/** @file painter.cpp @brief Реализация классов программы. */ #include <QPainter> #include <QPushButton> #include <QVBoxLayout> #include "painter.h"
/// @brief Конструктор главного окна /// @details Устанавливает режим выравнивания элементов и создает их. Painter::Painter() { QVBoxLayout *layout = new QVBoxLayout;
m_RenderArea = new RenderArea(this); QPushButton * btn = new QPushButton("Close", this); QObject::connect(btn, SIGNAL(clicked(bool)), this, SLOT(close()));
layout->addWidget(m_RenderArea); layout->addWidget(btn);
setLayout(layout); };
/// @brief Конструктор области отображения /// @param parent - Если значение NULL, то область отображения станет /// самостоятельным окном. В противном случае - виджетом-потомком. /// @details Именно в этом методе формируется набор графических примитивов, /// которые будут отображены при перерисовке. RenderArea::RenderArea(QWidget *parent) : QWidget(parent) { setBackgroundRole(QPalette::Base); // Формируем прямоугольник m_Path.moveTo(20.0, 30.0); m_Path.lineTo(80.0, 30.0); m_Path.lineTo(80.0, 70.0); m_Path.lineTo(20.0, 70.0); // Замыкаем контур - проводим линию от последней точки к первой m_Path.closeSubpath();
// Формируем сектор круга (в англ. - pie - кусок пирога) m_Path.moveTo(50.0, 50.0); m_Path.arcTo(20.0, 30.0, 60.0, 40.0, 60.0, 240.0); // Замыкаем контур m_Path.closeSubpath(); }
QSize RenderArea::minimumSizeHint() const { return QSize(50, 50); } QSize RenderArea::sizeHint() const { return QSize(100, 100); }
void RenderArea::paintEvent(QPaintEvent *) { // Готовим объект отображения QPainter painter(this);
// Определяем режим масштабирования со сглаживанием painter.setRenderHint(QPainter::Antialiasing);
// Определяем масштаб в зависимости от текущих геометрических размеров // области отображения painter.scale(width() / 100.0, height() / 100.0);
// Создаем перо для отображения контуров. Используем красный цвет и толщину // линий равную 2. painter.setPen( QPen(QColor(255,0,0), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
// Отображаем контуры painter.drawPath(m_Path);
// Нарисуем дополнительную вертикальную линию painter.setPen( QPen(QColor(0,127,0), 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.drawLine(50.0, 0.0, 50.0, 100.0); }
Рисунок 1 – Внешний вид окна приложения формирования изображения
Дата добавления: 2014-11-25; Просмотров: 540; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |