Класс QPaintEngine
Класс QPaintEngine предоставляет абстрактное определение того, как QPainter рисует на заданном устройстве в данной платформе. Подробнее...
| Заголовок: | #include <QPaintEngine> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| 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() и Систему рисования.
Документация по членам типа
Перечисление QPaintEngine::DirtyFlagфлаги QPaintEngine::DirtyFlags
| Константа | Значение | Описание |
|---|---|---|
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.
| Константа | Значение | Описание |
|---|---|---|
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
| Константа | Значение | Описание |
|---|---|---|
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::OpenGL |
6 |
|
QPaintEngine::Picture |
7 |
QPicture формат |
QPaintEngine::SVG |
8 |
Формат масштабируемой векторной графики XML |
QPaintEngine::Raster |
9 |
|
QPaintEngine::Direct3D |
10 |
Только Windows, движок на основе Direct3D |
QPaintEngine::Pdf |
11 |
Формат Portable Document Format |
QPaintEngine::OpenVG |
12 |
|
QPaintEngine::User |
50 |
Идентификатор типа первого пользователя |
QPaintEngine::MaxUser |
100 |
Идентификатор типа последнего пользователя |
QPaintEngine::OpenGL2 |
13 |
|
QPaintEngine::PaintBuffer |
14 |
|
QPaintEngine::Blitter |
15 |
|
QPaintEngine::Direct2D |
16 |
Только 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. Растровый рисунок будет повторно нарисован до заполнения 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)
Переопределите эту функцию, чтобы обновить состояние движка рисования.
При реализации эта функция отвечает за проверку текущего состояния движка рисования state и обновление изменённых свойств. Используйте функцию QPaintEngineState::state(), чтобы узнать, какие свойства необходимо обновить, а затем используйте соответствующую функцию get function для получения текущих значений заданных свойств.
См. также QPaintEngineState.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qpaintengine.html