Класс 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 (доступные через QGLWidget) и печати (что позволяет использовать QPainter для рисования на объекте QPrinter).
Если необходимо использовать QPainter для рисования на другом бэкэнде, необходимо создать подкласс QPaintEngine и переопределить все его виртуальные функции. Реализация QPaintEngine затем становится доступной путем создания подкласса QPaintDevice и переопределения виртуальной функции QPaintDevice::paintEngine().
QPaintEngine создается и принадлежит QPaintDevice, который его создал.
См. также QPainter, QPaintDevice::paintEngine() и Paint System.
Документация по типам членов
перечисление QPaintEngine::DirtyFlagфлаги 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.14/qpaintengine.html