Класс QPaintEngine
Класс QPaintEngine предоставляет абстрактное определение того, как QPainter рисует на заданном устройстве на заданной платформе. Подробнее...
| Заголовок: | #include <QPaintEngine> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Типы public
| перечисление | 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 } |
Функции public
| 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 для Embedded Linux |
QPaintEngine::OpenGL |
6 |
|
QPaintEngine::Picture |
7 |
QPicture формат |
QPaintEngine::SVG |
8 |
Формат масштабируемых векторных графических файлов SVG 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 точек QPoint в 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.0/qpaintengine.html