Малювання за допомогою qpainter - qt 4 програмування gui на з

Щоб почати малювати на пристрої малювання (зазвичай це віджет), ми просто створюємо об'єкт QPainter і передаємо йому покажчик на пристрій. наприклад:

void MyWidget :: paintEvent (QPaintEvent * event)

Ми можемо малювати різні фігури, використовуючи функції QPainter виду draw ... (). На рис 8.1 наведено найбільш важливі з них.

Малювання за допомогою qpainter - qt 4 програмування gui на з

Мал. 8.1. Часто використовувані функції draw ... () рисувальника QPainter.

Параметри настройки QPainter впливають на режим малювання. Деякі з них встановлюються на параметри налаштування пристрою, а інші не започатковано значеннями за замовчуванням. Трьома основними параметрами налаштування рисувальника є перо, кисть і шрифт:

• Перо використовується для відображення прямих ліній і контурів фігур. Воно має колір, товщину, стиль лінії, стиль закінчення лінії і стиль з'єднання ліній.

• Кисть являє собою шаблон, який використовується для заповнення геометричних фігур. Він зазвичай має колір і стиль, але може також являти собою текстуру (піксельну карту, повторювану нескінченно) або колірної градієнт.

• Шрифт використовується для відображення тексту. Шрифт має багато атрибутів, в тому числі назву і розмір.

Ці настройки можна в будь-який час модифікувати за допомогою функцій setPen (), setBrush () і setFont (), що викликаються для об'єктів QPen, QBrush або QFont.

Малювання за допомогою qpainter - qt 4 програмування gui на з

Мал. 8.2. Стилі закінчення ліній і стилі з'єднання ліній.

Мал. 8.3. Стилі пера.

Малювання за допомогою qpainter - qt 4 програмування gui на з

Мал. 8.4. Певні в Qt стилі кисті.


Мал. 8.5. Приклади геометричних фігур.

Давайте розглянемо кілька прикладів. Нижче наводиться програмний код для креслення еліпса, показаного на рис. 8.5 (а):

painter.setPen (QPen (Qt :: black, 12, Qt :: DashDotLine, Qt :: RoundCap));

painter.drawEllipse (80, 80, 400, 240);

Виклик setRenderHint () включає режим згладжування ліній, вказуючи QPainter на необхідність використання по краях квітів різної інтенсивності, щоб зменшити візуальне спотворення, яке зазвичай помітно, коли краю фігури представляються пікселями. В результаті краю сприймаються більш рівними на тих платформах і пристроях, які підтримують цю функцію.

Нижче наводиться програмний код для креслення сектора еліпса, показаного на рис. 8.5 (б):

painter.setPen (QPen (Qt :: black, 15, Qt :: SolidLine, Qt :: RoundCap, Qt :: MiterJoin));

painter.drawPie (80, 80, 400, 240, 60 * 16, 270 * 16);

Два останніх аргументу функції drawPie () задаються в шістнадцяті частках градуса.

Нижче наводиться програмний код для креслення кривої Безьє третього порядку, показаної на рис. 8.5 (в):

path.cubicTo (200, 80, 320, 80, 480, 320);

Клас QPainterPath може визначати довільні фігури векторної графіки, з'єднуючи один з одним основні графічні елементи: прямі лінії, еліпси, багатокутники, дуги, криві Безьє другого і третього порядку і інші ланцюжки графічних елементів рисувальника (painter paths). Такі ланцюжки є закінченими елементарними малюнками в тому сенсі, що будь-яка фігура або будь-яка комбінація фігур може бути представлена ​​у вигляді певної ланцюжка графічних елементів.

Ланцюжок графічних елементів визначає контур, а область всередині контуру можна заповнити який-небудь пензлем. У прикладі, представленому на рис. 8.5 (в), ми не ставили кисть, тому намальований тільки контур.

У трьох представлених вище прикладах використовуються вбудовані шаблони кисті (Qt :: SolidPattern, Qt :: DiagCrossPattern і Qt :: NoBrush). У сучасних додатках градієнтні наповнювачі є популярною альтернативою однорідним заповнювачів. Кольорові градієнти засновані на інтерполяції кольорів, що забезпечує згладжені переходи між двома або більше кольорами. Вони часто застосовуються для отримання ефекту тривимірності зображення, наприклад стиль Plastique використовує колірні градієнти при відтворенні кнопок QPushButton.

Qt підтримує три типи колірних градієнтів: лінійний, конічний і радіальний. У прикладі таймера духовки, який приводиться в наступному розділі, в одному віджеті використовується комбінація всіх трьох типів градієнтів для того, щоб зображення виглядало реалістично.

Малювання за допомогою qpainter - qt 4 програмування gui на з

Мал. 8.6. Кисті QPainter з колірними градієнтами.

• Лінійні градієнти визначаються двома контрольними точками і поруч «колірних відміток» на лінії, що з'єднує ці точки. Наприклад, лінійний градієнт на рис. 8.6 створений за допомогою наступного програмного коду:

QLinearGradient gradient (50, 100, 300, 350);

Ми поставили три кольори в трьох різних позиціях між двома контрольними точками. Позиції представляються у вигляді чисел з плаваючою точкою в діапазоні між 0 і 1, де 0 відповідає першій контрольній точці, а 1 - останньої контрольної точки. Колір між цими позиціями інтерполюється.

• Радіальні градієнти визначаються центральною точкою (хс. Вус), радіусом r і точкою фокусу (xf. Yf), яка доповнює колірні мітки. Центральна точка і радіус визначають коло. Зміна кольору поширюється на всі боки з точки фокуса, яка може збігатися з центральною точкою або може бути будь-який інший точкою всередині кола.

• Конічні градієнти визначаються центральною точкою (хс. Вус) і кутом. Зміна кольору поширюється навколо центральної точки подібно переміщенню секундної стрілки годинника.

До сих пір ми говорили про налаштування пера, пензля і шрифту рисувальника. QPainter має інші параметри налаштування, що впливають на спосіб малювання фігур і тексту:

• Кисть фону (background brush) використовується для заповнення фону геометричних фігур (тобто під шаблоном кисті), тексту або піксельної карти, коли в якості режиму відображення фону заданий Qt :: OpaqueMode (непрозорий режим) (за замовчуванням використовується режим Qt :: TransparentMode - прозорий).

• Вихідна точка кисті (brush origin) задає точку початку відображення шаблону кисті, в якості якої зазвичай використовується точка верхнього лівого кута віджета.

• Межі області малювання (clip region) визначають область малювання пристрою. Операції малювання, які виходять за межі цієї області, ігноруються.

• Область відображення, вікно і універсальна матриця перетворення (viewport, window і world matfix) визначають спосіб перекладу логічних координат QPainter в фізичні координати пристрою малювання. За замовчуванням системи логічних і фізичних координат збігаються. Системи координат розглядаються в наступному розділі.

• Режим композиції (composition mode) визначає спосіб взаємодії нових виведених пікселів з пікселями, вже присутніми на пристрої малювання. За замовчуванням використовується режим «source over», при якому нові пікселі малюються поверх існуючих. Цей режим підтримується тільки певними пристроями, і він розглядається пізніше в цьому розділі.

У будь-який момент часу ми можемо зберегти в стеці поточний стан рисувальника, викликаючи функцію save (), і відновити його пізніше, викликаючи функцію restore (). Це може бути корисно, якщо потрібно тимчасово змінити деякі параметри настройки рисувальника і потім їх відновити в колишні значення, як ми це побачимо в наступному розділі.

Схожі статті