Класс QPaintEngine
Класс QPaintEngine предоставляет абстрактное определение способа, которым QPainter рисует на заданном устройстве в заданной платформе. Подробнее...
| Заголовок: | #include <QPaintEngine> |
| qmake: | QT += gui |
Типы
| перечисление | DirtyFlag { DirtyPen, DirtyBrush, DirtyBrushOrigin, DirtyFont, DirtyBackground, …, AllDirty } |
| флаги | DirtyFlags |
| перечисление | PaintEngineFeature { AlphaBlend, Antialiasing, BlendModes, BrushStroke, ConicalGradientFill, …, AllFeatures } |
| флаги | PaintEngineFeatures |
| перечисление | PolygonDrawMode { OddEvenMode, WindingMode, ConvexMode, PolylineMode } |
| перечисление | Type { X11, Windows, MacPrinter, CoreGraphics, QuickDraw, …, Direct2D } |
Открытые функции
| QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures()) | |
| виртуальный | ~QPaintEngine() |
| виртуальный bool | begin(QPaintDevice *pdev) = 0 |
| виртуальный void | drawEllipse(const QRectF &rect) |
| виртуальный void | drawEllipse(const QRect &rect) |
| виртуальный void | drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor) |
| виртуальный void | drawLines(const QLineF *lines, int lineCount) |
| виртуальный void | drawLines(const QLine *lines, int lineCount) |
| виртуальный void | drawPath(const QPainterPath &path) |
| виртуальный void | drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0 |
| виртуальный void | drawPoints(const QPointF *points, int pointCount) |
| виртуальный void | drawPoints(const QPoint *points, int pointCount) |
| виртуальный void | drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode) |
| виртуальный void | drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode) |
| виртуальный void | drawRects(const QRectF *rects, int rectCount) |
| виртуальный void | drawRects(const QRect *rects, int rectCount) |
| виртуальный void | drawTextItem(const QPointF &p, const QTextItem &textItem) |
| виртуальный void | drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p) |
| виртуальный bool | end() = 0 |
| bool | hasFeature(QPaintEngine::PaintEngineFeatures feature) const |
| bool | isActive() const |
| QPaintDevice * | paintDevice() const |
| QPainter * | painter() const |
| void | setActive(bool state) |
| виртуальный QPaintEngine::Type | type() const = 0 |
| виртуальный void | updateState(const QPaintEngineState &state) = 0 |
Подробное описание
Qt предоставляет несколько предварительно созданных реализаций QPaintEngine для различных бэкэндов отрисовки, которые мы поддерживаем. Основной движок отрисовки — растровый движок отрисовки, который содержит программный растризатор, поддерживающий полный набор функций на всех поддерживаемых платформах. Это значение по умолчанию для отрисовки на классах, основанных на QWidget, например, на Windows, X11 и macOS, это бэкэнд для отрисовки на QImage, и он используется в качестве резервного варианта для движков отрисовки, которые не поддерживают определённую возможность. Кроме того, мы предоставляем реализации QPaintEngine для OpenGL (доступные через QOpenGLWidget) и печати (что позволяет использовать QPainter для рисования на объекте QPrinter).
Если нужно использовать QPainter для отрисовки на другом бэкэнде, необходимо создать подкласс QPaintEngine и переопределить все его виртуальные функции. Реализация QPaintEngine затем делается доступной путём создания подкласса QPaintDevice и переопределения виртуальной функции QPaintDevice::paintEngine().
QPaintEngine создаётся и принадлежит QPaintDevice, который его создал.
См. также QPainter, QPaintDevice::paintEngine() и Система отрисовки.
Документация типов членов
enum QPaintEngine::DirtyFlagflags QPaintEngine::DirtyFlags
| Constant | Value | Description |
|---|---|---|
QPaintEngine::DirtyPen |
0x0001 |
Ручка грязная и требует обновления. |
QPaintEngine::DirtyBrush |
0x0002 |
Кисть грязная и требует обновления. |
QPaintEngine::DirtyBrushOrigin |
0x0004 |
Происхождение кисти грязное и требует обновления. |
QPaintEngine::DirtyFont |
0x0008 |
Шрифт грязный и требует обновления. |
QPaintEngine::DirtyBackground |
0x0010 |
Фон грязный и требует обновления. |
QPaintEngine::DirtyBackgroundMode |
0x0020 |
Режим фона грязный и требует обновления. |
QPaintEngine::DirtyTransform |
0x0040 |
Преобразование грязное и требует обновления. |
QPaintEngine::DirtyClipRegion |
0x0080 |
Область обрезки грязная и требует обновления. |
QPaintEngine::DirtyClipPath |
0x0100 |
Область вырезания грязная и требует обновления. |
QPaintEngine::DirtyHints |
0x0200 |
Рекомендации по рендерингу грязные и требуют обновления. |
QPaintEngine::DirtyCompositionMode |
0x0400 |
Режим композиции грязный и требует обновления. |
QPaintEngine::DirtyClipEnabled |
0x0800 |
Включена или выключена обрезка — состояние грязное и требует обновления. |
QPaintEngine::DirtyOpacity |
0x1000 |
Постоянная непрозрачность изменилась и требует обновления в рамках изменения состояния в QPaintEngine::updateState(). |
QPaintEngine::AllDirty |
0xffff |
Удобный перечисление, используемый внутри. |
Эти типы используются QPainter для вызова ленивых обновлений различных состояний в QPaintEngine с использованием QPaintEngine::updateState().
Двигатель отрисовки должен обновить каждое грязное состояние.
Тип DirtyFlags — это псевдоним для QFlags<DirtyFlag>. Он хранит логическое ИЛИ сочетание значений DirtyFlag.
enum QPaintEngine::PaintEngineFeatureflags QPaintEngine::PaintEngineFeatures
Это перечисление используется для описания функций или возможностей, которые имеет движок отрисовки. Если функция не поддерживается движком, QPainter сделает всё возможное, чтобы эмулировать эту функцию другими средствами, и передаст движку альфа-смешанное QImage с результатами эмуляции. Некоторые функции не могут быть эмулированы: AlphaBlend и PorterDuff.
| Constant | Value | Description |
|---|---|---|
QPaintEngine::AlphaBlend |
0x00000080 |
Двигатель может альфа-смешивать примитивы. |
QPaintEngine::Antialiasing |
0x00000400 |
Двигатель может использовать антиалиасинг для улучшения внешнего вида отрисованных примитивов. |
QPaintEngine::BlendModes |
0x00008000 |
Двигатель поддерживает режимы смешивания. |
QPaintEngine::BrushStroke |
0x00000800 |
Двигатель поддерживает рисование штрихов, содержащих кисти в качестве заливок, а не только твёрдые цвета (например, штриховую градиентную линию шириной 2). |
QPaintEngine::ConicalGradientFill |
0x00000040 |
Двигатель поддерживает конические градиентные заливки. |
QPaintEngine::ConstantOpacity |
0x00001000 |
Двигатель поддерживает функцию, предоставляемую QPainter::setOpacity(). |
QPaintEngine::LinearGradientFill |
0x00000010 |
Двигатель поддерживает линейные градиентные заливки. |
QPaintEngine::MaskedBrush |
0x00002000 |
Двигатель способен рендерить кисти, имеющие текстуру с альфа-каналом или маской. |
QPaintEngine::ObjectBoundingModeGradients |
0x00010000 |
Двигатель имеет встроенную поддержку градиентов с режимом координат QGradient::ObjectBoundingMode. В противном случае, если поддерживается QPaintEngine::PatternTransform, градиенты в режиме «ограничение объекта» преобразуются в градиенты с режимом координат QGradient::LogicalMode и преобразованием кисти для сопоставления координат. |
QPaintEngine::PainterPaths |
0x00000200 |
Двигатель поддерживает работу с контурами. |
QPaintEngine::PaintOutsidePaintEvent |
0x20000000 |
Двигатель способен отрисовывать за пределами событий рисования. |
QPaintEngine::PatternBrush |
0x00000008 |
Двигатель способен рендерить кисти со стилями кисти, указанными в Qt::BrushStyle. |
QPaintEngine::PatternTransform |
0x00000002 |
Двигатель поддерживает преобразование узоров кисти. |
QPaintEngine::PerspectiveTransform |
0x00004000 |
Двигатель поддерживает перспективы преобразований примитивов. |
QPaintEngine::PixmapTransform |
0x00000004 |
Двигатель может преобразовывать пиксельмапы, включая вращение и сдвиг. |
QPaintEngine::PorterDuff |
0x00000100 |
Двигатель поддерживает операции Porter-Duff. |
QPaintEngine::PrimitiveTransform |
0x00000001 |
Двигатель поддерживает преобразование примитивов рисования. |
QPaintEngine::RadialGradientFill |
0x00000020 |
Двигатель поддерживает радиальные градиентные заливки. |
QPaintEngine::RasterOpModes |
0x00020000 |
Двигатель поддерживает побитовые растровые операции. |
QPaintEngine::AllFeatures |
0xffffffff |
Все вышеперечисленные функции. Это значение перечисления обычно используется в качестве маски битов. |
Тип PaintEngineFeatures — это псевдоним для QFlags<PaintEngineFeature>. Он хранит логическое ИЛИ сочетание значений PaintEngineFeature.
enum QPaintEngine::PolygonDrawMode
| Constant | Value | Description |
|---|---|---|
QPaintEngine::OddEvenMode |
0 |
Полигон должен быть нарисован с использованием правила заливки OddEven. |
QPaintEngine::WindingMode |
1 |
Полигон должен быть нарисован с использованием правила заливки Winding. |
QPaintEngine::ConvexMode |
2 |
Полигон является выпуклым и может быть нарисован с использованием специализированных алгоритмов, где это возможно. |
QPaintEngine::PolylineMode |
3 |
Должен быть нарисован только контур полигона. |
enum QPaintEngine::Type
| Постоянная | Значение | Описание |
|---|---|---|
QPaintEngine::X11 |
0 |
|
QPaintEngine::Windows |
1 |
|
QPaintEngine::MacPrinter |
4 |
|
QPaintEngine::CoreGraphics |
3 |
macOS's Quartz2D (CoreGraphics) |
QPaintEngine::QuickDraw |
2 |
macOS's QuickDraw |
QPaintEngine::QWindowSystem |
5 |
Qt для встраиваемой Linux |
QPaintEngine::PostScript |
6 |
(Больше не поддерживается) |
QPaintEngine::OpenGL |
7 |
|
QPaintEngine::Picture |
8 |
формат QPicture |
QPaintEngine::SVG |
9 |
Формат XML Scalable Vector Graphics |
QPaintEngine::Raster |
10 |
|
QPaintEngine::Direct3D |
11 |
Только Windows, движок на базе Direct3D |
QPaintEngine::Pdf |
12 |
Формат Portable Document Format |
QPaintEngine::OpenVG |
13 |
|
QPaintEngine::User |
50 |
Идентификатор первого типа пользователя |
QPaintEngine::MaxUser |
100 |
Идентификатор последнего типа пользователя |
QPaintEngine::OpenGL2 |
14 |
|
QPaintEngine::PaintBuffer |
15 |
|
QPaintEngine::Blitter |
16 |
|
QPaintEngine::Direct2D |
17 |
Только Windows, движок на базе Direct2D |
Документация функций-членов
QPaintEngine::QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())
Создаёт движок рисования с набором функций, указанным в caps.
[virtual] QPaintEngine::~QPaintEngine()
Удаляет движок рисования.
[pure virtual] bool QPaintEngine::begin(QPaintDevice *pdev)
Переопределите эту функцию, чтобы инициализировать свой движок рисования, когда рисование должно начаться на устройстве рисования pdev. Верните true, если инициализация прошла успешно; в противном случае верните false.
[virtual] void QPaintEngine::drawEllipse(const QRectF &rect)
Переопределите эту функцию, чтобы нарисовать наибольший эллипс, который может быть размещён внутри прямоугольника rect.
По умолчанию вызывается drawPolygon().
[virtual] void QPaintEngine::drawEllipse(const QRect &rect)
По умолчанию эта функция вызывает плавающей точкой версию этой функции
[virtual] void QPaintEngine::drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)
Переопределите эту функцию, чтобы нарисовать часть image, задаваемую прямоугольником sr, в заданном прямоугольнике rectangle с использованием флагов преобразования flags для преобразования её в пиксельную карту.
[virtual] void QPaintEngine::drawLines(const QLineF *lines, int lineCount)
По умолчанию список линий в lines разбивается на отдельные вызовы drawPath() или drawPolygon() в зависимости от набора функций движка рисования.
[virtual] void QPaintEngine::drawLines(const QLine *lines, int lineCount)
Это перегруженная функция.
По умолчанию происходит преобразование первых lineCount линий в lines в QLineF и вызов плавающей точкой версии этой функции.
[virtual] void QPaintEngine::drawPath(const QPainterPath &path)
По умолчанию функция игнорирует path и ничего не делает.
[pure virtual] void QPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
Переопределите эту функцию, чтобы нарисовать часть pm, указанную прямоугольником sr, в заданном r.
[virtual] void QPaintEngine::drawPoints(const QPointF *points, int pointCount)
Рисует первые pointCount точек в буфере points
[virtual] void QPaintEngine::drawPoints(const QPoint *points, int pointCount)
Рисует первые pointCount точек в буфере points
По умолчанию происходит преобразование первых pointCount QPoints в points в QPointFs и вызов плавающей точкой версии drawPoints.
[virtual] void QPaintEngine::drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
Переопределите эту виртуальную функцию, чтобы нарисовать многоугольник, определяемый первыми pointCount точками в points, используя режим mode.
Примечание: Должна быть переопределена хотя бы одна из функций drawPolygon().
[virtual] void QPaintEngine::drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
Это перегруженная функция.
Переопределите эту виртуальную функцию, чтобы нарисовать многоугольник, определяемый первыми pointCount точками в points, используя режим mode.
Примечание: Должна быть переопределена хотя бы одна из функций drawPolygon().
[virtual] void QPaintEngine::drawRects(const QRectF *rects, int rectCount)
Рисует первые rectCount прямоугольников в буфере rects. По умолчанию эта функция вызывает drawPath() или drawPolygon() в зависимости от набора функций движка рисования.
[virtual] void QPaintEngine::drawRects(const QRect *rects, int rectCount)
Это перегруженная функция.
По умолчанию происходит преобразование первых rectCount прямоугольников в буфере rects в QRectF и вызов плавающей точкой версии этой функции.
[virtual] void QPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)
Эта функция рисует элемент текста textItem в позиции p. По умолчанию эта функция преобразует текст в QPainterPath и рисует полученную траекторию.
[virtual] void QPaintEngine::drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)
Переопределите эту функцию для отрисовки pixmap в заданном rect, начиная с заданного p. Pixmap будет отрисовываться повторно до тех пор, пока rect не будет заполнен.
[pure virtual] bool QPaintEngine::end()
Переопределите эту функцию для завершения отрисовки на текущем устройстве рисования. Верните true, если отрисовка завершилась успешно; в противном случае верните false.
См. также begin() и isActive().
bool QPaintEngine::hasFeature(QPaintEngine::PaintEngineFeatures feature) const
Возвращает true , если движок рисования поддерживает указанное feature; в противном случае возвращает false.
bool QPaintEngine::isActive() const
Возвращает true , если движок рисования активно рисует; в противном случае возвращает false.
См. также setActive().
QPaintDevice *QPaintEngine::paintDevice() const
Возвращает устройство, на котором рисует этот движок, если отрисовка активна; в противном случае возвращает nullptr.
QPainter *QPaintEngine::painter() const
Возвращает объект рисования движка рисования.
void QPaintEngine::setActive(bool state)
Устанавливает активное состояние движка рисования в state.
См. также isActive().
[pure virtual] QPaintEngine::Type QPaintEngine::type() const
Переопределите эту функцию для возврата типа движка рисования Type.
[pure virtual] void QPaintEngine::updateState(const QPaintEngineState &state)
Переопределите эту функцию для обновления состояния движка рисования.
При реализации эта функция отвечает за проверку текущего состояния движка рисования и обновление измененных свойств. Используйте функцию QPaintEngineState::state() для определения свойств, которые необходимо обновить, затем используйте соответствующую функцию get для получения текущих значений для заданных свойств.
См. также QPaintEngineState.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qpaintengine.html