//for starf study
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QPaintDevice>
#include<QImage>
#include<QPainter>
#include<QBrush>
#include<QRectF >
#include<QLineF>
#include<QPainterPath>
#include<QPicture >
#include<QPixmap>
#include<QStaticText>
#include<QFont>
#include<QFontInfo>
#include<QFontMetrics>
#include<QPen>
#include<QColor>
#include<QTransform>
//QPainter类在小部件和其他绘制设备上执行低级绘制。
//QPainter提供了高度优化的功能,以完成大多数绘图GUI程序所需的功能。
//注意:QPainter绘画功能一定只能在paintEvent或paint里面使用
//QPainter太过复杂 后续补充测试实例
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
img = new QImage(200,200,QImage::Format_ARGB32);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter p; //也可以shi用QPainter p(this); 但是尽量不要在定义的时候初始化设备
//因为构造函数无法在QPainter初始化失败时提供反馈
//如果使用了p(this) 这种方式,那么可以不写begin()和end()函数
qDebug()<<p.begin(this); //开始绘制绘制设备,如果成功,则返回true;
//调用begin时,所有画师设置(setPen,setBrush等)都会重置为默认值。
//set
p.setBackground(QBrush(QColor(0x88aa1188))); //将画师的背景画笔设置为给定画笔。
//背景画笔是在绘制不透明文本、点画线和位图时填充的画笔。背景笔刷在透明背景模式(默认设置)下不起作用。
p.setBackgroundMode(Qt::OpaqueMode);//设置背景模式 将画师的背景模式设置为给定模式
//Qt::TransparentMode 透明模式(默认值)
//Qt::OpaqueMode 不透明模式
p.setBrush(QBrush(QColor(0xffaa1188))); //设置填充画刷对象
p.setBrush(Qt::SolidPattern); //设置填充画刷样式
p.setBrushOrigin(QPointF(1,1));//将笔刷原点设置为指定点。画笔原点指定画家画刷的(0,0)坐标。
//void QPainter::setBrushOrigin(const QPoint &position)
//void QPainter::setBrushOrigin(int x, int y)
QPainterPath path;
path.moveTo(40, 10);
path.lineTo(30, 50);
path.cubicTo(1000, 0, 50, 20, 110, 120);
p.setClipPath(path,Qt::ReplaceClip); //启用剪裁,并使用剪裁操作将画家的剪裁路径设置为给定路径。 请注意,剪辑路径是在逻辑(画师)坐标中指定的。
//Qt::ReplaceClip 将当前剪辑路径/rect/区域替换为函数调用中提供的路径/rect/区域。
//Qt::NoClip 此操作将关闭剪辑。
//void QPainter::setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
//void QPainter::setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
//void QPainter::setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip)
p.setClipRegion(QRegion(180,180,100,100));//使用指定的剪辑操作将剪辑区域设置为给定区域。默认剪辑操作是替换当前剪辑区域。
//请注意,剪辑区域以逻辑坐标表示。
p.setClipping(true); //如果启用为true,则启用剪裁;如果启用为false,则禁用剪裁。
p.setCompositionMode(QPainter::CompositionMode_SourceOver); //将合成模式设置为给定模式。
//这是默认模式。源的alpha用于混合目标顶部的像素
p.setFont(QFont("宋体",20,20)); //将画家的字体设置为给定的字体。
p.setLayoutDirection(Qt::RightToLeft);//将画师绘制文本时使用的布局方向设置为指定方向
p.setOpacity(1); //将画师的不透明度设置为不透明度。 0就是透明
p.setPen(QPen(QColor(0xfa1945ff))); //将画家的笔设置为给定的笔。
//笔定义了如何绘制线条和轮廓,还定义了文本颜色。
//void QPainter::setPen(const QColor &color) QColor的重载
p.setPen(Qt::SolidLine); //定义画笔样式
p.setRenderHint(QPainter::Antialiasing); //如果参数2为true,则在画师上设置给定的渲染提示;
//QPainter::Antialiasing 指示引擎应尽可能消除基本体边缘的锯齿。
//QPainter::TextAntialiasing 指示引擎应尽可能使用反别名文本。要强制禁用文本的抗锯齿
//QPainter::SmoothPixmapTransform 指示引擎应使用平滑的pixmap变换算法(例如双线性)而不是最近邻。
p.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing);
//函数同上,不过可以处理多个功能,如果参数2位false,则取消渲染提示
p.setTransform(QTransform(), true); //设置坐标系变换矩阵。如果参数2为true,则将指定的变换与当前矩阵组合;否则,它将替换当前矩阵。
p.setViewTransformEnabled(true); //如果启用为true,则启用视图转换;如果启用为false,则禁用视图转换
p.setViewport(QRect(15,15,200,200));//将画家的视图矩形设置为给定的矩形,并启用视图变换。
//视图矩形是视图变换的一部分。视口指定设备坐标系。
//void QPainter::setViewport(int x, int y, int width, int height)
p.setWindow(QRect(15,15,200,200)); //将画家的视图矩形设置为给定的矩形,并启用视图变换。
//void QPainter::setWindow(int x, int y, int width, int height)
p.setWorldMatrixEnabled(true); //如果启用为true,则启用世界矩阵转换;
p.setWorldTransform(QTransform(), true); //同 p.setTransform
p.shear(500,400); //通过(sh,sv)剪切坐标系。
path.moveTo(49, 10);
path.lineTo(39, 50);
path.cubicTo(10, 0, 50, 20, 110, 120);
p.strokePath(path, QPen(QColor(Qt::red)));//使用pen指定的笔绘制路径的轮廓(笔划)
//draw
p.drawLine(15,15,90,90); //画一根线 参数是起点坐标和终点坐标
//void QPainter::drawLine(const QLine &line) //QLine版本的重载
//void QPainter::drawLine(const QLineF &line) //QLineF版本的重载
//void QPainter::drawLine(const QPoint &p1, const QPoint &p2) QPoint版本的重载
//void QPainter::drawLine(const QPointF &p1, const QPointF &p2) QPointF版本的重载
QLineF Lines[3];
Lines[0] = QLineF(150,150,150,50);
Lines[1] = QLineF(150,150,50,50);
Lines[2] = QLineF(150,150,0,50);
p.drawLines(Lines, 3); //画多根线条 参数1表示线条数组 参数2表示要画几根
//void QPainter::drawLines(const QVector<QLine> &lines) QVector<QLine> 版本的重载
//void QPainter::drawLines(const QVector<QLineF> &lines) QVector<QLineF>类型的重载 会画出数组里所有的线条
//void QPainter::drawLines(const QPointF *pointPairs, int lineCount) 参数1为QPointF的重载
//两个点表示为一根线,相邻的两个点被处理为一根线
//所以点的个数应该至少是2*lineCount
//void QPainter::drawLines(const QPoint *pointPairs, int lineCount) 参数1为QPoint的重载
//void QPainter::drawLines(const QVector<QPointF> &pointPairs) 参数为QVector<QPointF>的重载
//显示所有的点对所表示的线
//void QPainter::drawLines(const QVector<QPoint> &pointPairs) 参数为QVector<QPoint>的重载
p.drawArc(QRectF(15,15,100,300),0, 270*16); //绘画圆弧 参数1是圆弧的切线矩形
//如果是正方形,那就是正圆弧线
//如果是矩形,那就是椭圆弧线
//参数2和参数3是圆弧的起点和终点,用角度值表示
//精度上,每一度分为16等分,所以一个圆圈有360*16=5760份
//填写0的时候,是三点钟方向的位置
//参数2为正数,则划过弧线为逆时针,反之则是顺时针
//void QPainter::drawArc(const QRect &rectangle, int startAngle, int spanAngle)
//QRect参数的重载
//void QPainter::drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
//整数类型的重载
p.drawChord(QRectF(50,50,100,300),0, 270*16); //和drawArc参数一样,不过会连接首尾
//void QPainter::drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
//整数类型的重载
//void QPainter::drawChord(const QRect &rectangle, int startAngle, int spanAngle)
//QRect参数的重载
QPointF points[6];
points[0] = QPointF(10,10);
points[1] = QPointF(30,10);
points[2] = QPointF(45,30);
points[3] = QPointF(30,45);
points[4] = QPointF(10,45);
points[5] = QPointF(-5,10);
p.drawConvexPolygon(points,6); //使用当前画笔绘制凸多边形。参数1输入点列表,参数2表示要读取几个点
//void QPainter::drawConvexPolygon(const QPolygonF &polygon) 直接读取所有点的重载
//void QPainter::drawConvexPolygon(const QPoint *points, int pointCount) QPoint类型的重载
//void QPainter::drawConvexPolygon(const QPolygon &polygon) 使用当前画笔绘制由多边形定义的凸多边形。
p.drawEllipse(QRect(50,50,150,200)); //绘画指定矩形的内切圆
//void QPainter::drawEllipse(const QRect &rectangle) 参数为QRect的重载
//void QPainter::drawEllipse(int x, int y, int width, int height) 参数为整数的重载
//void QPainter::drawEllipse(const QPointF ¢er, qreal rx, qreal ry)参数为圆心,水平半径,垂直半径的重载
//void QPainter::drawEllipse(const QPoint ¢er, int rx, int ry) 参数为QPoint的重载
QRectF target(390.0, 300.0, 380.0, 360.0);
QRectF source(0.0, 0.0, 380.0, 360.0);
QImage image(":/new/prefix1/D:/test.png");
p.drawImage(target, image, source,Qt::AutoColor);//将参数2的参数3区域显示在参数1所示的区域
//void QPainter::drawImage(const QRect &target, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
//QRect类型的重载
//void QPainter::drawImage(const QPointF &point, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = ...)
//参数1只提供截图起点,截取多少用参数3确定,这个重载更加实用
//void QPainter::drawImage(const QRectF &rectangle, const QImage &image)
//将给定的图像绘制到给定的矩形中。
// 注意:如果图像和矩形大小不一致,则将缩放图像以适合矩形。
//void QPainter::drawImage(const QRect &rectangle, const QImage &image) QRect版本重载
//void QPainter::drawImage(const QPointF &point, const QImage &image)
//参数1只提供复制起点,然后将图片整个复制到设备中去,这个需要自己考虑尺寸问题
//void QPainter::drawImage(const QPoint &point, const QImage &image) QPoint版本的重载
// void QPainter::drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor)
//类似于第二个重载,参数1,2表示要显示的显示起点,参数4,5表示要剪切的剪切起点,参数6,7表示要剪切的尺寸
path.moveTo(20, 80);
path.lineTo(20, 30);
path.cubicTo(80, 0, 50, 50, 80, 80);
p.drawPath(path);//使用当前画笔绘制轮廓,使用当前画刷绘制填充,绘制给定的绘制路径。
QPicture pic = QPicture();
pic.load(":/new/prefix1/D:/test.png");
p.drawPicture(0, 0, pic);//在给定点重放给定图片。
//void QPainter::drawPicture(int x, int y, const QPicture &picture) 参数为整数的重载
//void QPainter::drawPicture(const QPointF &point, const QPicture &picture)参数为QPointF的重载
p.drawPie(QRect(200,200,50,50),0,120*16); //扇形绘制,参数和drawArc一样
//void QPainter::drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
//void QPainter::drawPie(const QRect &rectangle, int startAngle, int spanAngle) 其他重载
p.drawPixmap(QRect(100,100,150,150),QPixmap(":/new/prefix1/D:/test.png"), QRect(0,0,150,150));
//将给定pixmap的矩形部分源绘制到绘制设备中的给定目标中。
//注意:如果pixmap和矩形大小不一致,pixmap将缩放以适合矩形。
//将参数2的参数3部分,绘制到参数1的位置
//void QPainter::drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)
//void QPainter::drawPixmap(int x, int y, int w, int h, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
//void QPainter::drawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
//void QPainter::drawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)
//void QPainter::drawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)
//void QPainter::drawPixmap(const QPointF &point, const QPixmap &pixmap)
//void QPainter::drawPixmap(const QPoint &point, const QPixmap &pixmap)
//void QPainter::drawPixmap(int x, int y, const QPixmap &pixmap)
//void QPainter::drawPixmap(const QRect &rectangle, const QPixmap &pixmap)
//void QPainter::drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap) 简单变换参数的重载
p.drawPoint(QPoint(150,150)); //绘制一个点
//void QPainter::drawPoint(const QPoint &position)
//void QPainter::drawPoint(int x, int y) 简单变换参数的版本
p.drawPoints(points,5); //绘制多个点,参数1提供点数组,参数2表示要显示几个
//void QPainter::drawPoints(const QPolygonF &points)
//void QPainter::drawPoints(const QPoint *points, int pointCount)
//void QPainter::drawPoints(const QPolygon &points) 简单参数变换重载
QPointF points2[6];
points[0] = QPointF(350,10);
points[1] = QPointF(240,20);
points[2] = QPointF(165,340);
points[3] = QPointF(170,455);
points[4] = QPointF(220,23);
points[5] = QPointF(110,50);
p.drawPolygon(points, 6); //使用当前画笔和画刷绘制由阵列点中的第一个pointCount点定义的多边形。
//连接每一个点,然后用画刷填充
//void QPainter::drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)
//void QPainter::drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
//void QPainter::drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
static const QPointF points3[3] = {
QPointF(400.0, 180.0),
QPointF(300.0, 110.0),
QPointF(50.0, 130.0),
};
p.drawPolyline(points, 3); //连接每个点的折线段,不会主动闭合,不会填充
//void QPainter::drawPolyline(const QPolygonF &points)
//void QPainter::drawPolyline(const QPoint *points, int pointCount)
//void QPainter::drawPolyline(const QPolygon &points) 简单参数变换
QRectF rectangle(110.0, 220.0, 180.0, 260.0);
p.drawRect(rectangle); //画出矩形
//void QPainter::drawRect(int x, int y, int width, int height)
//void QPainter::drawRect(const QRect &rectangle)
//void QPainter::drawRects(const QRectF *rectangles, int rectCount)
//void QPainter::drawRects(const QVector<QRectF> &rectangles)
//void QPainter::drawRects(const QRect *rectangles, int rectCount)
//void QPainter::drawRects(const QVector<QRect> &rectangles)
//简单参数变换和画出多个矩形
p.drawRoundedRect(QRectF(120,230,190,270),20,15,Qt::AbsoluteSize); //画出圆角矩形
//xRadius和yRadius参数指定定义圆角矩形角的椭圆的半径。
//最后一个参数为Qt::AbsoluteSize ,参数2和3表示固定的数值
//最后一个参数为Qt::RelativeSize,xRadius和yRadius分别以矩形宽度和高度的一半的百分比指定 0.0到100.0之间
//void QPainter::drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = ...)
//void QPainter::drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = ...)
p.drawStaticText(QPointF(210,150), QStaticText("TEST")); //在给定的topLeftPosition绘制给定的静态文本。
//void QPainter::drawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText)
//void QPainter::drawStaticText(int left, int top, const QStaticText &staticText)
p.drawText(QPointF(230,150), "meau"); //从给定位置开始,以当前定义的文字方向绘制给定文字。
//此函数不处理换行符(\n)
//void QPainter::drawText(const QPoint &position, const QString &text)
//void QPainter::drawText(int x, int y, const QString &text)
QRectF newf;
p.drawText(QRectF(270,150,100,50), Qt::AlignCenter, "actic",&newf);//在参数1的区域显示参数3
//参数2设置显示模式
//参数4返回实际的文本域,不需要就填nullptr
qDebug()<<"newf="<<newf;
//void QPainter::drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)
//void QPainter::drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)
//void QPainter::drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
p.drawTiledPixmap(QRectF(300,150,100,50), QPixmap());//在给定矩形内绘制平铺的像素贴图,其原点位于给定位置。
//void QPainter::drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0)
//void QPainter::drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = ...)
//get info
QBrush bsh = p.background(); //返回当前背景笔刷。
qDebug()<< p.backgroundMode(); //获得当前画家的背景模式,
const QRectF rc = QRectF(15,15, 100,100);
QRectF rcf = p.boundingRect(rc,Qt::AlignRight,"hello world"); //当需要在参数1的设备上,以参数2的格式显示文本参数3时,
//此函数返回文本域所在位置
//参数2设置文本显示模式:
//Qt::AlignLeft 与左边缘对齐。
//Qt::AlignRight 与右边缘对齐。
//Qt::AlignHCenter 在可用空间中水平居中
//Qt::AlignTop 与顶部对齐。
//Qt::AlignBottom 与底部对齐。
//Qt::AlignVCenter 在可用空间中垂直居中
//Qt::AlignCenter 同AlignVCenter | AlignHCenter 水平垂直剧中
//Qt::TextSingleLine 将所有空白视为空格,只打印一行。
//Qt::TextExpandTabs 使U+0009(ASCII制表符)字符移动到下一个制表位。
//Qt::TextShowMnemonic 将字符串“&P”显示为P表示符号,使用“&&”。
//Qt::TextWordWrap 在适当的点断线,例如在单词边界处。
//Qt::TextIncludeTrailingSpaces 文本包含末尾空格
//QRect QPainter::boundingRect(const QRect &rectangle, int flags, const QString &text) 此函数的QRect类型重载
//QRect QPainter::boundingRect(int x, int y, int w, int h, int flags, const QString &text)参数为整数的重载
//QRectF QPainter::boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
//显示富文本需要的重载 最后一个参数是有关富文本的描述
qDebug()<<rc<<rcf;
qDebug()<<p.brush(); //返回画家的当前画笔。
qDebug()<<p.brushOrigin(); //返回当前设置的笔刷原点。(画刷的位置 坐标)
qDebug()<<p.clipBoundingRect(); //如果存在剪辑,则返回当前剪辑的边框;否则返回一个空矩形。请注意,剪辑区域以逻辑坐标表示。
//不能保证边界矩形是紧密的。
qDebug()<<p.clipPath(); //以逻辑坐标返回当前剪辑路径。
qDebug()<<p.clipRegion(); //返回当前设置的剪辑区域。请注意,剪辑区域以逻辑坐标表示。
qDebug()<<p.combinedTransform(); //返回组合当前窗口/试图和其他域变换的变换矩阵。
qDebug()<<p.compositionMode(); //返回当前合成模式。
QWidget* mwd = (QWidget*)p.device(); //返回当前的绘画设备,但是不能直接是QPaintDevice设备
QFont ft = p.font();// 返回用于绘图文本的当前设置字体。
QFontInfo ftinfo = p.fontInfo();//如果画师处于活动状态,则返回画师的字体信息。否则,返回值未定义。
QFontMetrics ftMe=p.fontMetrics(); //如果画师处于活动状态,则返回画师的字体度量。否则,返回值未定义。
qDebug()<<p.hasClipping(); //如果已设置剪辑,则返回true;
qDebug()<<p.isActive(); //如果begin()已被调用,而end()尚未被调用,则返回true;
qDebug()<<p.layoutDirection(); //返回画师在绘制文本时使用的布局方向。
//Qt::LeftToRight Qt::RightToLeft Qt::LayoutDirectionAuto
qDebug()<<p.opacity(); //返回画师的不透明度。默认值为1。
qDebug()<<p.paintEngine(); //如果画师处于活动状态,则返回画师当前操作的绘制引擎;
qDebug()<<p.pen(); //返回画家的当前笔。
qDebug()<<p.renderHints(); //返回一个标志,指定为此画师设置的渲染提示
qDebug()<<p.testRenderHint(QPainter::Antialiasing); //如果设置了该提示,则返回true
QTransform form = p.transform(); //返回世界变换矩阵。
qDebug()<<p.viewTransformEnabled(); // 如果启用视图转换,则返回true;
qDebug()<<p.viewport(); //返回视口矩形。
qDebug()<<p.window(); //返回视口矩形。
qDebug()<<p.worldMatrixEnabled();//如果启用了世界变换,则返回true;
form = p.worldTransform(); //同 transform
//control
p.eraseRect(QRect(0,0,30,30)); //删除给定矩形内的区域。
//void QPainter::eraseRect(int x, int y, int width, int height)
//void QPainter::eraseRect(const QRect &rectangle)
path.moveTo(120, 80);
path.lineTo(120, 30);
path.cubicTo(180, 0, 50, 50, 80, 80);
p.fillPath(path,QBrush(QColor(0xff0000ff))); //使用给定的笔刷填充给定的路径。轮廓没有画出来。
p.fillRect(QRect(100,120,30,30),QBrush(QColor(0xff00ff)));//用指定的画笔填充给定的矩形。
//void QPainter::fillRect(int x, int y, int width, int height, const QBrush &brush)
//void QPainter::fillRect(const QRect &rectangle, const QBrush &brush)
//void QPainter::fillRect(const QRectF &rectangle, const QColor &color)
//void QPainter::fillRect(int x, int y, int width, int height, const QColor &color)
//void QPainter::fillRect(const QRect &rectangle, const QColor &color)
//void QPainter::fillRect(int x, int y, int width, int height, Qt::GlobalColor color)
//void QPainter::fillRect(const QRect &rectangle, Qt::GlobalColor color)
//void QPainter::fillRect(const QRectF &rectangle, Qt::GlobalColor color)
//void QPainter::fillRect(int x, int y, int width, int height, Qt::BrushStyle style)
//void QPainter::fillRect(const QRect &rectangle, Qt::BrushStyle style)
//void QPainter::fillRect(const QRectF &rectangle, Qt::BrushStyle style)
//void QPainter::fillRect(int x, int y, int width, int height, QGradient::Preset preset)
//void QPainter::fillRect(const QRect &rectangle, QGradient::Preset preset)
//void QPainter::fillRect(const QRectF &rectangle, QGradient::Preset preset) 简单的参数变换的重载
p.resetTransform();// 重置使用translate,scale,shear,rotate,setWorldTransform,setViewport,和setWindow,进行的任何变换。
p.restore(); //恢复当前画师状态(从堆栈中弹出保存的状态)。
p.rotate(90); //顺时针旋转坐标系。给定的角度参数以度为单位。
p.rotate(-90);
p.save(); //保存当前画师状态(将状态推送到堆栈上)。save()后面必须跟一个相应的restore();函数的作用是:展开堆栈。
p.scale(1.5,1.5); //按(sx,sy)缩放坐标系。
p.translate(QPointF(199.2,199)); //将坐标系平移给定的偏移量;
//void QPainter::translate(const QPoint &offset)
//void QPainter::translate(qreal dx, qreal dy)
p.end(); //结束绘画。绘画时使用的任何资源都会被释放。
}
QPainter功能方法(5.12)
于 2022-03-29 08:27:59 首次发布