2021-04-13QT坐标系统和坐标变换

qt的坐标变换函数:

为了绘图的方便,QPainter提功了一些坐标变换的功能,通过平移,旋转等坐标变换,得到一个逻辑坐标系统,使用逻辑坐标系统在某些时候绘图更方便。

QPainter有关坐标变换操作的函数:

分组                                函数原型                                        功能

坐标变换                 void translate(qreal dx,qreal dy)            坐标系统一定的偏移量,坐标原点平移到新的点

                                void rotate(qreal angle)                        坐标系统顺时针旋转一个角度

                                void scale(qreal sx,qreal sy)                坐标系统缩放

                                void shear(qrael sh,qreal sy)                坐标系统做扭转变换

状态保存与恢复       void save()                                            保存painter当前的状态,就是将当前状态压入栈

                                void restore()                                        恢复上一次状态,就是从堆栈中弹出上次的状态

                                void resetTransform()                            复位所有的坐标变换

实例:

在widget的头文件中声明:protected:    void paintEvent(QPaintEvent *event);

绘图时件中的代码:

    QPainter painter(this);

    //指定渲染的模式

    //QPainter::Antialiasing=抗锯齿

    //QPainter::TextAntialiasing=绘制的字体抗锯齿

    painter.setRenderHint(QPainter::Antialiasing);

    painter.setRenderHint(QPainter::TextAntialiasing);

    //生成五角星的五个顶点的坐标,假设原点在五角星

    qreal R=100;//半径

    const qreal Pi=3.1415926;

    qreal deg=Pi*72/180;

    QPoint points[5]={

      QPoint(R,0),

      QPoint(R*std::cos(deg),-R*std::sin(deg)),

      QPoint(R*std::cos(2*deg),-R*std::sin(2*deg)),

      QPoint(R*std::cos(3*deg),-R*std::sin(3*deg)),

      QPoint(R*std::cos(4*deg),-R*std::sin(4*deg)),

    };

    //设置字体

    QFont  font;

    //设置字体的大小

    font.setPointSize(12);

    //设置字体是否加粗

    font.setBold(true);

    //画家使用该字体

    painter.setFont(font);

    //设置画笔

    QPen penLine;

    //设置画笔线宽

    penLine.setWidth(2);

    //设置画线颜色

    penLine.setColor(Qt::blue);

    //设置线的类型

    penLine.setStyle(Qt::SolidLine);

    //设置线的端点样式

    penLine.setJoinStyle(Qt::BevelJoin);

    //画家使用画笔

    painter.setPen(penLine);

    //设置画刷

    QBrush brush;

    //设置画刷颜色

    brush.setColor(Qt::yellow);

    //画刷填充样式

    brush.setStyle(Qt::SolidPattern);

    //设计绘制五角星的painterPath,已重复使用

    QPainterPath starPath;

    starPath.moveTo(points[0]);

    starPath.lineTo(points[2]);

    starPath.lineTo(points[4]);

    starPath.lineTo(points[1]);

    starPath.lineTo(points[3]);

    //闭合路径,最后一个点与第一个点相连

    starPath.closeSubpath();

    //显示端点编号

    starPath.addText(points[0],font,"0");

    starPath.addText(points[0],font,"1");

    starPath.addText(points[0],font,"2");

    starPath.addText(points[0],font,"3");

    starPath.addText(points[0],font,"4");

    //绘图

    //保存坐标状态

    painter.save();

    //平移

    painter.translate(100,120);

    //画星星

    painter.drawPath(starPath);

    //设置文本

    painter.drawText(0,0,"S1");

    //恢复坐标状态

    painter.restore();

    //平移

    painter.translate(300,120);

    //缩放

    painter.scale(0.8,0.8);

    //顺时针旋转90度

    painter.rotate(90);

    //画第二个星星

    painter.drawPath(starPath);

    //设置文本

    painter.drawText(0,0,"S2");

    //复位所有坐标变换

    painter.resetTransform();

    //平移

    painter.translate(500,120);

    //逆时针旋转-145度

    painter.rotate(-145);

    //画星星

    painter.drawPath(starPath);

    //设置文本

    painter.drawText(0,0,"S3");


        

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 夜莺2517阅读 127,826评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 11,861评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,749评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 7,526评论 2 9

友情链接更多精彩内容