QPainter类

QPainter类用于在控件和其它绘图设备上进行绘制。


Header: #include <QPainter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Inherited By:

QStylePainter


详细说明>>>


【公共类型】

class

PixmapFragment

这个类用于在 QPainter::drawPixmapFragments() 函数中绘制一个像素图。

enum

CompositionMode { CompositionMode_SourceOver, CompositionMode_DestinationOver, CompositionMode_Clear, CompositionMode_Source, CompositionMode_Destination, …, RasterOp_SourceOrNotDestination }

合成模式的枚举

enum

PixmapFragmentHint { OpaqueHint }

透明模式枚举(本质上只是一个开关)

flags

PixmapFragmentHints

返回当前透明模式

enum

RenderHint { Antialiasing, TextAntialiasing, SmoothPixmapTransform, VerticalSubpixelPositioning, LosslessImageRendering, NonCosmeticBrushPatterns }

渲染设置

flags

RenderHints

返回渲染设置状态


【公有函数 】

QPainter()
构造空painter。
QPainter(QPaintDevice *device)

在绘制设备device构造一个painter并可以立即绘制。 此构造函数对只使用一次绘制很方便。例如在QWidget::paintEvent()中,构造函数为您调用begin(),而QPainter析构函数自动调用end()。

下面是一个使用 begin() 和 end()的示例:

使用此构造函数的相同示例:

由于painter初始化失败时,构造函数无法提供反馈,因此您应该使用 begin() 和 end() 在外部设备(例如打印机)上绘画。

/ ~QPainter()
const QBrush &

background() const

返回当前背景笔刷。
Qt::BGMode

backgroundMode() const

返回当前背景模式(只有两种:透明Qt::TransparentMode或不透明Qt::OpaqueMode)
bool

begin(QPaintDevice *device)

在绘制设备上开始绘制,成功返回true;失败返回false。

注意:所有的绘图设置(setPen(),setBrush()等)在此函数调用时,都会被重置为默认值。 可能发生的错误是严重的问题,例如:

注意:大多数情况都可以使用构造函数来代替 begin(),并且end() 会在析构时自动完成的。

警告:一个绘图设备一次只能由一个painter进行绘画。

警告:不支持在格式为QImage::Format_Indexed8QImage上绘制。

void beginNativePainting()

刷新绘制管道并为用户直接向底层图形上下文发出命令做准备。必须后跟对endNativePainting()的调用。

请注意,只有基础绘制引擎更改的状态才会重置为其各自的默认状态。我们重置的状态可能会因版本而异,以下状态当前在OpenGL 2引擎中被重置:

禁用blending(混合)。

禁用depth(深度),stencil(图案),scissor tests(剪式测试)。

active texture unit(活动纹理单元)重置为0。

depth mask(深度遮罩), depth function(深度函数)和 clear depth(清除深度)重置为默认值。

stencil mask(模板掩码), stencil operation(模板操作)和 stencil function(模板功能)重置为默认值。

current color(当前颜色)重置为纯白色。

例如,如果用户在beginNativePaint()/endNativePainting()块内更改了OpenGL多边形模式,则endNativePainting()不会将其重置为默认状态。以下示例显示了painter命令和原始OpenGL命令的混合:

QRectF boundingRect(const QRectF &rectangle, int flags, const QString &text)

使用当前设置的font()返回带有指定标志 flags 的 text 在给定矩形rectangle内绘制时的边框;也就是说,当给定相同的参数时,该函数告诉您drawText()函数将在哪里绘制。 如果 text 不适合使用指定标志 flags 的给定矩形rectangle,则该函数返回所需的矩形。 flags参数是以下标志的按位“或”运算:

如果设置了几个水平对齐标志或几个垂直对齐标志,则对齐结果是未定义的。

QRect boundingRect(const QRect &rectangle, int flags, const QString &text)
重载。使用当前设置的font()返回带有指定标志flagstext在给定矩形内rectangle绘制时的边框。
QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text)
重载。返回给定文本的边框,它将在从点(x,y)开始、宽度为w、高度为h的矩形内绘制。
QRectF boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
这个重载函数没有将标志指定为Qt::AlignmentFlag 和 Qt::TextFlag的按位OR,而是采用一个option选项参数。QTextOption 类提供了对常规富文本属性的描述。
const QBrush & brush() const
返回painter的当前画笔。
QPoint brushOrigin() const
返回当前设置的画笔原点。
QRectF clipBoundingRect() const

如果有剪辑,则返回当前剪辑的边框;否则返回一个空矩形。

注意剪辑区域是以逻辑坐标给出的。

边框不能保证是紧密的。

QPainterPath clipPath() const

返回逻辑坐标中的当前剪辑路径。

警告:QPainter不会显式存储组合剪辑,因为这是由底层QPaintEngine处理的,因此会根据需要重新创建路径并将其转换到当前逻辑坐标系。这可能是一个昂贵的操作。

QRegion clipRegion() const
返回当前设置的剪辑区域。注意剪辑区域是以逻辑坐标给出的。【警告同上】
QTransform combinedTransform() const
返回组合当前窗口/视口和世界变换的变换矩阵。

QPainter::

CompositionMode

compositionMode() const
返回当前合成模式。
QPaintDevice * device() const
返回此 painter当前正在其上绘画的设备,如果painter未处于活动状态,则返回nullptr。

const

QTransform &

deviceTransform() const

返回从逻辑坐标转换到平台相关绘画设备的设备坐标的矩阵。

只有在平台相关句柄 (Qt::HANDLE)上使用平台绘制命令时才需要此函数,并且平台本身不进行转换。 可以查询QPaintEngine::PaintEngineFeature 枚举来确定平台是否执行转换。

void drawArc(const QRectF &rectangle, int startAngle, int spanAngle)

绘制由给定矩形rectangle、startAngle和spanAngle定义的弧线。

startAngle(起始角度)和spanAngle(跨度角度)必须指定为1/16度,即一个完整的圆等于5760(16 * 360)。角度的正值表示逆时针方向,负值表示顺时针方向。零度在3点钟位置。

void drawArc(const QRect &rectangle, int startAngle, int spanAngle)
重载,功能同上。
void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
从(x,y)开始,以指定的宽度w和高度h以及给定的起始角度startAngle和跨度角度spanAngle绘制由矩形定义的圆弧。
void drawChord(const QRectF &rectangle, int startAngle, int spanAngle)

绘制由给定矩形rectangle、起始角度startAngle和跨度角度spanAngle定义的弦,弦由当前画笔填充brush()。

void drawChord(int x, int y, int width, int height, int startA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值