2D绘图:QPainter绘制器 与 (QPen、QFont及QBrush等属性)的使用方法

一、基本绘图属性

1.基本绘图类:

Qt的绘图功能基于QPainter、QPainterDevice和QPainterEngine三个类。QPainter类在窗口和其他绘制设备上执行低级绘制。它提供高度优化的功能来完成大多数图形用户界面程序所需的工作,包括绘制基本的点、线、圆等基本形状,以及复杂的形状如饼图和弦等。此外,QPainter还能绘制对齐的文本和像素图。

QPaintDevice类表示QPainter的绘图设备,QPainter能在QPaintDevice的子类上进行图形绘制,QpaintDevice子类包含QImage、QOpenGLPaintDevice、QWidget、QPixmap、PixelBuffer、QGLFramebufferObject、QPicture、QPrinter。

2.绘图事件:

void wiget::paintEvent(QPaintEvent *event){}

QPainter只能在paintEvent中进行绘图。paintEvent事件在窗口刷新时触发,如最大化最小化,拖动窗口边缘时也会触发。

3.主要属性:

(1) QPen:控制线条颜色宽度线性。

(2) QBrush:设置一个区域的填充特性。

(3) QFont:用于绘制文字。

(4) QPixmap: 绘制图片,适合小图片。

(5) QImage: 绘制图片,适合大图片。

(6) QBitmap: QPixmap的一个子类,单通道图。

(7) QPicture: 一张画布,可以用于保存、读取Qpainter的绘图。

(8)QPrinter类是一个在打印机上绘制的绘图设备。它允许你将图形输出到打印机,生成打印预览,或者直接生成PDF文件。

4.基本图形绘制函数:

drawPoint() //画点

drawLine() //画直线

drawRect() //画矩形

drawArc() //画圆弧

drawEllipse() //画椭圆

drawPie() //画扇形

drawPolygon() //画多边形

drawChord() //画弦

drawRoundedRect() //画圆角矩形

drawPolyline() //画折线

drawConvexPolygon() //画凸多边形

二、QPainter构造函数

1、QPainter(QPaintDevice *device)

构造一个立即开始绘制绘制设备的QPainter对象。此构造函数对于临时的绘制者很方便,并且应该只使用一次。

构造函数自动调用 begin(),析构函数自动调用 end()

在Qt5中,QPainter不再需要显式调用begin()函数来开始绘制。你可以直接创建一个QPainter对象并调用drawXXX()函数进行绘制。如果你尝试使用begin()函数,可能会遇到编译错误或者运行时错误,因为在Qt5中begin()函数已经不再使用。

三、重点绘图属性类介绍

1.QFont的一些属性与功能:

QFont是Qt框架中用于描述字体属性的工具类。

设置属性:

void setFamily(const QString &family);

void setPointSize(int size);

void setWeight(int weight);

void setItalic(bool italic);

void setUnderline(bool underline);

获取属性:

QString family() const;

int pointSize() const;

int weight() const;

bool italic() const;

bool underline() const;

属性修改后,需要使用setFont()来应用于绘图。

2.QPen的一些属性与功能:

主要函数:

//函数原型 功能

void setColor(QColor &color) //设置画笔颜色

void setWidth(int width) //设置线条宽度

void setStyle(Qt::PenStyle style) //设置线条样式,参数为Qt::PenStyle枚举类型

void setCapStyle(Qt::PenCapStyle style) //设置线条端点样式,参数为Qt::PenCapStyle枚举类型

void setJoinStyle(Qt::PenJoinStyle style)//设置连接样式,参数为Qt::PenJoinStyle枚举类型

属性修改后,需要使用setPen()来应用于绘图。

(1)线条样式:

Qt::NoPen //没有画笔,设置此属性时,用画笔不会画出任何东西。但是画刷仍然有效,表现出来就是无边界,但有填充。

Qt::SolidLine //实线

Qt::DashLine //虚线

Qt::DotLine //点状线

Qt::DashDotLine //虚线和点交替

Qt::DashDotDotLine //虚线和双点交替

Qt::CustomDashLine //自定义样式

(2)线条端点样式:

Qt::FlatCap //平顶端点

Qt::SquareCap //方形端点

Qt::RoundCap //圆形端点

(3)线条连接样式:

Qt::BevelJoin //斜切连接

Qt::MiterJoin //直角连接

Qt::RoundJoin //圆连接

3.QBrush的一些属性与功能:

主要函数:

//函数原型 功能

void setColor(QColor &color) //设置画刷颜色

void setStyle(Qt::BrushStyle style) //设置画刷样式

void setTexture(QPixmap &pixmap) //设置一个QPixmap图片作为画刷的图片

void setTextureImage(QImage &image) //设置一个QImage类型的图片作为画刷的图片

属性修改后,需要使用setBrush()来应用于绘图。

(1)基本填充和线性填充:

//枚举常量 描述

Qt::NoBrush //不填充

Qt::SolidPattern //单一颜色填充

Qt::HorPattern //水平线填充

Qt::VerPattern //垂直线填充

(2)渐变填充:

Qt::LinearGradientPattern //线性渐变,需要使用QLinearGradient类对象作为Brush

Qt::RadialGradientPattern //辐射渐变,需要使用QRadialGradient类对象作为Brush

Qt::ConicalGradientPattern //圆锥型渐变,需要使用QConicalGradient类对象作为Brush

Qt::TexturePattern //材质填充,需要指定texture或textureImage图片

4. QPrinter用法

(1)QPrinter printer;

printer.setOutputFormat(QPrinter::PdfFormat); // 设置输出格式为PDF,也可以其他格式

printer.setOutputFileName("output.pdf"); // 设置输出文件名

QPainter painter1(&printer);

painter1.drawText(100, 100, "Hello, PDF1!");

painter1.end(); // 结束绘制,内容将被发送到打印机

(2)注意:

用QPrinter需要添加QT += printsupport;

当设置QPainter painter1(&printer)后,绘制图形输出到pdf文件,就不会再输出到ui页面上了。

四、实用成员函数 (原文链接:https://zhuanlan.zhihu.com/p/650004296

1、QPainter(QPaintDevice *device)

构造一个立即开始绘制绘制设备的QPainter对象。此构造函数对于临时的绘制者很方便,并且应该只使用一次。

构造函数自动调用 begin(),析构函数自动调用 end()。

以下代码效果一样:

QPainter p;
p.begin(this);
p.drawLine(...);
p.end();
QPainter p(this);
p.drawLine(...);

2、bool begin(QPaintDevice *device)

开始绘制绘画设备,如果成功则返回true,否则返回false。请注意,在调用 begin()时,所有绘画工具设置(setPen()、setBrush()等)都将重置为默认值。

调用此函数可能存在的错误:

painter->begin(nullptr); //错误,绘制设备为空

QPixmap image(0, 0);
painter->begin(&image); //错误,图片为空

painter->begin(myWidget);
painter2->begin(myWidget); //错误,同一时间不能由两个QPainter绘制同一设备

注:不支持在格式为 QImage::Format_Indexed8 的 QImage 上绘制。

构造函数自动调用 begin(),析构函数自动调用 end()

在Qt5中,QPainter不再需要显式调用begin()函数来开始绘制。你可以直接创建一个QPainter对象并调用drawXXX()函数进行绘制。如果你尝试使用begin()函数,可能会遇到编译错误或者运行时错误,因为在Qt5中begin()函数已经不再使用。

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

返回使用当前设置的 font() 使用指定标志在给定矩形内部绘制时显示的文本的边界矩形。

即该函数告诉您在给定相同参数的情况下 drawText() 函数将在何处绘制。如果使用指定的标志文本不适合给定的矩形,则该函数返回所需的矩形。flags 参数见下面的第30点。

void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(QPen(Qt::red,5));
QRect rect = QRect(20,20,100,50);
painter.drawRect(rect);
QFont font = this->font();
font.setPointSize(30);
painter.setFont(font);
painter.drawText(rect,Qt::AlignHCenter | Qt::TextWordWrap,"黄河之水天上来");
painter.setPen(QPen(Qt::green,5));
auto bRect = painter.boundingRect(rect,Qt::AlignHCenter | Qt::TextWordWrap,"黄河之水天上来");
painter.drawRect(bRect);
}

红框是设置的要绘制的矩形。不过字太大了只能绘制两个字,绿色是要绘制这句诗实际上需要的边界矩形。

4、QPoint brushOrigin()

获取绘制开始的点。

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::red,5));
painter.drawEllipse(painter.brushOrigin(),5,5);
painter.translate(50,50);
painter.drawEllipse(painter.brushOrigin(),5,5);
painter.setBrushOrigin(100,100);
painter.drawEllipse(painter.brushOrigin(),5,5);

5、void setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)

启用剪辑,并使用给定的剪辑操作将剪辑区域设置为给定的矩形。

裁剪操作 Qt::ClipOperation:

  • Qt::NoClip:关闭裁剪。
  • Qt::ReplaceClip:将当前的裁剪路径/矩形/区域替换为函数调用中提供的路径/矩形/区域。
  • Qt::IntersectClip:与当前裁剪路径/矩形/区域与函数调用中提供的路径相交。
void Widget::paintEvent(QPaintEvent *event)
{
auto rect = event->rect();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::red,5));
painter.setClipRect(rect.adjusted(20,20,-20,-20));
painter.drawLine(rect.topLeft(),rect.bottomRight());
}

6、void setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip)

设置裁剪路径。

void Widget::paintEvent(QPaintEvent *event)
{
auto rect = event->rect();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setBrush(Qt::cyan);
QPainterPath path;
path.addRoundRect(rect.adjusted(20,20,-20,-20),60,60);
painter.setClipPath(path);
painter.drawRect(rect);
}

7、void setClipRegion(const QRegion ®ion, Qt::ClipOperation operation = Qt::ReplaceClip)

设置裁剪区域,见 QRegion详解

8、void drawArc(const QRect &rect, int startAngle, int lenAngle)

绘制圆弧。

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::red,5));
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
painter.drawArc(rectangle, startAngle, spanAngle);
painter.setPen(QPen(Qt::blue,3,Qt::DotLine));
painter.drawRect(rectangle);

9、void drawChord(const QRectF &rectangle, int startAngle, int spanAngle)

绘制扇形,参数含义和绘制弧形一样。

painter.drawChord(rectangle, startAngle, spanAngle);

10、void drawConvexPolygon(const QPointF *points, int pointCount)

绘制凸多边形(凸多边形的内角均小于或等于180°)。第一个点隐式连接到最后一个点,并且多边形被当前的brush()填充。

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::red,3));

static const QPointF points[4] = { QPointF(10.0, 80.0),
QPointF(20.0, 10.0),
QPointF(80.0, 30.0),
QPointF(90.0, 70.0)};
painter.drawConvexPolygon(points, 4);

11、void drawConvexPolygon(const QPolygonF &polygon)

绘制凸多边形,重载函数。

QPolygonF polygon;
polygon.append(QPointF(10.0, 80.0));
polygon.append(QPointF(20.0, 10.0));
polygon.append(QPointF(80.0, 60.0));
painter.drawConvexPolygon(polygon);

12、void drawEllipse(const QRectF &rectangle)

绘制椭圆,参数是椭圆的外切矩形。

13、void drawEllipse(const QPointF ¢er, qreal rx, qreal ry)

绘制椭圆,参数为椭圆的中心和x、y方向的半径。

14、void drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

将给定图像的矩形部分(参数3)源绘制到绘制设备中的目标矩形(参数1)中。如果图像和矩形尺寸不相同,则将图像缩放以适合矩形。

QPainter painter(this);
QImage img(":/D:/eee.jpg");
QRectF r{40,40,100,200};
painter.drawImage(r,img);

QPainter painter(this);
QImage img(":/D:/eee.jpg");
QRectF r{40,40,100,200};
painter.drawImage(r,img,QRectF(30,30,200,400));

15、void drawLine(const QLineF &line)

绘制直线。QLineF

16、void drawPath(const QPainterPath &path)

使用当前的笔绘制轮廓并使用当前的笔刷绘制路径。QPainterPath

17、void drawPie(const QRectF &rectangle, int startAngle, int spanAngle)

绘制扇形。扇形被当前的 brush()填充。必须以度的1/16来指定startAngle和spanAngle,即一个完整的圆等于5760(16 * 360)。角度的正值表示逆时针方向,而负值表示顺时针方向。参考上面的 drawArc()示意图。

QPainter painter(this);
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

painter.setPen(QPen(Qt::red,5));
painter.drawPie(rectangle, startAngle, spanAngle);
painter.setPen(QPen(Qt::blue,3,Qt::DotLine));
painter.drawRect(rectangle);

18、void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)

将给定像素图的矩形部分源绘制到绘画设备中的给定目标中。如果像素图和矩形大小不相同,则将像素图缩放为适合矩形。

QPainter painter(this);
QPixmap img(":/D:/eee.jpg");
QRectF r{40,40,100,200};
painter.drawPixmap(r,img,QRectF(30,30,200,400));

19、void drawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)

在参数1的点处开始绘制参数3指定的图片区域,不会缩放。

QPainter painter(this);
QPixmap img(":/D:/eee.jpg");
painter.drawPixmap(QPointF(40,40),img,QRectF(30,30,200,400));

20、void drawPixmap(const QPointF &point, const QPixmap &pixmap)

在给定点开始绘制图片,不会缩放。

21、void drawPixmap(const QRect &rectangle, const QPixmap &pixmap)

在矩形区域绘制图片,会缩放。

22、void drawPoint(const QPointF &position)

绘制点。

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::red,5));
painter.drawPoint(QPointF(40,40));
painter.setPen(QPen(Qt::red,15));
painter.drawPoint(QPointF(60,60));

22、void drawPoints(const QPointF *points, int pointCount)

绘制数组中的点。

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::red,5));

static const QPointF points[4] = {
QPointF(10.0, 80.0),
QPointF(20.0, 10.0),
QPointF(80.0, 30.0),
QPointF(90.0, 70.0)
};
painter.drawPoints(points, 4);

23、void drawPoints(const QPolygonF &points)

绘制多边形中的点。

24、void drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)

绘制多边形。QPolygon

25、void drawPolyline(const QPointF *points, int pointCount)

绘制折线。

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::red,5));

static const QPointF points[3] = {
QPointF(10.0, 80.0),
QPointF(20.0, 10.0),
QPointF(80.0, 30.0),
};
painter.drawPolyline(points, 3);

26、void drawPolyline(const QPolygonF &points)

绘制折线。

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::red,5));
QPolygon polygon = QPolygon();
polygon << QPoint(22,33)<<QPoint(78,45)<<QPoint(111,233)<<QPoint(234,88)<<QPoint(34,89);
painter.drawPolyline(polygon);

27、void drawRect(const QRectF &rectangle)

绘制矩形。QRectF

28、void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

绘制圆角矩形。见QPainterPath

29、void drawText(const QPointF &position, const QString &text)

从给定位置开始,以当前定义的文本方向绘制给定文本。此函数不处理换行符(\ n),因为它不能将文本分成多行,也不能显示换行符。默认情况下,QPainter绘制抗锯齿的文本。

30、void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)

在提供的矩形内绘制给定的文本。矩形以及对齐标记定义了文本的锚点。

auto rect = event->rect();
QPainter painter(this);
painter.setPen(QPen(Qt::red,5));
painter.drawText(rect, Qt::AlignCenter, "黄河之水天上来\n奔流到海不复回");

参数4是:绘制的文本的外接矩形,例:

auto rect = event->rect();
QPainter painter(this);
painter.setPen(QPen(Qt::red,5));
QRectF boundingRect;
painter.drawText(rect, Qt::AlignCenter, "黄河之水天上来\n奔流到海不复回", &boundingRect);
painter.setPen(QPen(Qt::cyan,3,Qt::DotLine));
painter.drawRect(boundingRect);

参数2文本标识:单独使用时的效果:

Qt::AlignLeft:文本靠左。
Qt::AlignRight:文本靠右。
void Widget::paintEvent(QPaintEvent *event)
{
auto rect = event->rect();
QPainter painter(this);
painter.setPen(QPen(Qt::red,5));
QFont font;
font.setPixelSize(40);
painter.setFont(font);
painter.drawText(rect,Qt::AlignRight, "黄河之水天上来\n奔流到海不复回哈哈哈");
}
  • Qt::AlignHCenter:水平方向居中。
  • Qt::AlignJustify:两端对齐,无效,原因未知。

  • Qt::AlignTop:文本靠上。
  • Qt::AlignBottom:文本靠下。
  • Qt::AlignVCenter:垂直方向居中。

  • Qt::AlignCenter:水平和垂直方向居中。
  • Qt::TextSingleLine:保持文本单行,把换行符当做空格。
painter.drawText(rect,Qt::TextSingleLine, "黄河之水天上来\n奔流到海不复回哈哈哈");

Qt::TextExpandTabs:这个资料语焉不详,我推测作用是复制一个制表符。

void Widget::paintEvent(QPaintEvent *event)
{
auto rect = event->rect();
QPainter painter(this);
painter.setPen(QPen(Qt::red,5));
QFont font;
font.setPixelSize(40);
painter.setFont(font);
QString text = "A\tA";
painter.drawText(rect,Qt::TextExpandTabs, text);
painter.drawText(QPointF(0,80),text);

auto bRect = painter.boundingRect(rect,Qt::TextExpandTabs,text);
painter.drawRect(bRect);
}

使用这个标识之后多出了一个制表符空间。

Qt::TextShowMnemonic:将字符串“&P”显示为P。对于&号,请使用“&&”。例:

QString text = "&ABC";
painter.drawText(rect,Qt::TextShowMnemonic, text);
painter.drawText(QPointF(0,80),text);

Qt::TextWordWrap:文字自动换行。

31、void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())。

QTextOption option(Qt::AlignLeft | Qt::AlignVCenter);
option.setTextDirection(Qt::RightToLeft);
painter.drawText(rect,"黄河之水天上来",option);

32、void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())

绘制平铺图片。绘制从图片中参数3的位置开始绘制。

QPixmap pixmap(":/D:/666666.PNG");
painter.drawTiledPixmap(rect,pixmap,QPointF(100,100));

33、void eraseRect(const QRectF &rectangle)

擦除区域。

相当于:

fillRect(rectangle, background());

34、bool end()

结束绘画。 释放绘画时使用的所有资源。

35、void fillPath(const QPainterPath &path, const QBrush &brush)

填充路径,但不绘制轮廓。

QPainterPath path;
path.cubicTo(QPointF(0,0),QPointF(200,200),QPointF(150,20));
painter.fillPath(path,Qt::cyan);

36、void fillRect(const QRect &rectangle, const QBrush &brush)

填充矩形,可用颜色、画刷、渐变、画刷类型填充。

37、bool isActive()

是否已调用 begin() 而尚未调用 end()。

38、void resetTransform()

重置使用 translate(),scale(),shear(),rotate(),setWorldTransform(),setViewport() 和setWindow() 进行的所有转换。

39、void restore()

恢复当前的QPainter状态(从堆栈弹出保存的状态)。

40、void save()

保存当前的画家状态(将状态推送到堆栈上)。 在save()之后必须有一个相应的restore()。(end()函数会展开堆栈)

41、void rotate(qreal angle)

顺时针旋转坐标系。

QPainter painter(this);
painter.setPen(QPen(Qt::red,5));
painter.translate(150,150);
painter.drawText(QPointF(0,0),"黄河之水天上来");
painter.rotate(90);
painter.drawText(QPointF(0,0),"黄河之水天上来");
painter.rotate(90);
painter.drawText(QPointF(0,0),"黄河之水天上来");
painter.rotate(90);
painter.drawText(QPointF(0,0),"黄河之水天上来");

42、void scale(qreal sx, qreal sy)

坐标x、y轴缩放相应比例。

43、void setBackground(const QBrush &brush)

设置背景画刷。背景画刷是在绘制不透明文本、填充画刷样式和绘制位图时填充的画刷。背景笔刷在透明背景模式下没有效果(默认设置)。

void Widget::paintEvent(QPaintEvent *event)
{
auto rect = event->rect();
QPainter painter(this);
painter.setBackgroundMode(Qt::OpaqueMode);
painter.setBackground(Qt::cyan);
painter.fillRect(rect,Qt::CrossPattern);
}

QPainter painter(this);
painter.setBackgroundMode(Qt::OpaqueMode);
painter.setBackground(Qt::cyan);
painter.setPen(QPen(Qt::red,5));
painter.drawText(QPointF(55,55),"黄河之水天上来");

绘制位图:

auto rect = event->rect();
QPainter painter(this);
painter.setBackgroundMode(Qt::OpaqueMode);
painter.setBackground(Qt::cyan);
QBitmap img(":/D:/qqq.jpeg");
painter.drawPixmap(rect,img);

44、void setBackgroundMode(Qt::BGMode mode)。

设置背景模式。

  • Qt::BGMode:
  • Qt::TransparentMode:(默认设置)绘制不透明文本、填充画刷样式和绘制位图时无需设置背景像素。

Qt::OpaqueMode:用当前背景色填充不透明文本、画刷样式和位图的背景像素。

45、void setOpacity(qreal opacity)

设置透明度。值为0.0~1.0。

46、void setWorldTransform(const QTransform &transform, bool combine = false)

设置变换矩阵。见 QTransform。如果参数2是true,将与当前矩阵的变换效果合并,否则替换当前变换矩阵。

QPainter painter(this);
auto rectPoint = event->rect().center();

QTransform transform;
transform.translate(rectPoint.x(),rectPoint.y());
painter.setWorldTransform(transform);

QTransform transform2;
transform2.rotate(45);
painter.setWorldTransform(transform2,true);

painter.setPen(QPen(Qt::cyan, 3, Qt::DashDotLine));
painter.drawRect(0, 0, 100, 100);

设置了两个变换矩阵,一个效果是平移,一个效果是旋转,第一次设置平移效果,第二次设置旋转和平移效果合并,即有平移和旋转两种效果。

注:setTransform() 和 setWorldTransform()这俩没区别,查看源码发现 setTransform() 实际上就是调用 setWorldTransform():

47、void setWindow(const QRect &rectangle)

设置窗口转换矩形。见窗口-视口转换

48、void setViewTransformEnabled(bool enable)

设置是否启用窗口-视口转换。设置为 false 则相当于 setWindow() 的设置无效。

49、void setViewport(const QRect &rectangle)

设置视口。见窗口-视口转换

50、void setWorldMatrixEnabled(bool enable)

设置是否启用变换矩阵,设为 false则 相当于 setTransform() 的设置无效。

51、void shear(qreal sh, qreal sv)

剪切坐标,见 QTransform

52、void strokePath(const QPainterPath &path, const QPen &pen)

使用指定的画笔描绘路径轮廓,其内部实际上是调用 drawPath()。

53、void translate(qreal dx, qreal dy)

平移绘制坐标。

QPainter painter(this);
painter.translate(50,50);
painter.drawText(QPointF(0,0),"黄河之水天上来");

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值