QPainter功能方法(5.12)


//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 &center, qreal rx, qreal ry)参数为圆心,水平半径,垂直半径的重载
        //void QPainter::drawEllipse(const QPoint &center, 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(); //结束绘画。绘画时使用的任何资源都会被释放。
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值