在上章和上上上章:

28.QT-QPainter介绍

30.QT-渐变之QLinearGradient、 QConicalGradient、QRadialGradient

学习了QPainter基础绘制后,接下来,来学习QPainter其它函数之rotate()函数

首先来看看QPainter其它函数

void QPainter::drawPixmap ( int x, int y, int w, int h,
const QPixmap & pixmap, int sx, int sy, int sw, int sh );
//绘画pixmap
// x y w h:表示本身的绘画面积
//sx sy sw sh:表示pixmap的绘画面积 void QPainter::drawPixmap ( int x, int y, const QPixmap & pixmap, int sx, int sy, int sw, int sh );
//绘画pixmap
// x y 表示绘画起始位置
//sx sy sw sh:表示pixmap的绘画面积 drawTiledPixmap ( int x, int y, int width, int height, const QPixmap & pixmap,
int sx = , int sy = );
//平铺pixmap void QPainter::translate ( qreal dx, qreal dy );
//将坐标(dx,dy)设置显示原点 void scale ( qreal sx, qreal sy )
//设置图片缩放,sx(横坐标放大系数),sy(纵坐标放大系数) void rotate ( qreal angle ); //旋转绘画区域(比如斜文本),angle=90,则表示90度
//以时针方向旋转(顺时针)

rotate()函数分析

如果没有通过translate()设置中心原点,则默认将图片以(0,该图片的高)为原点

示例1-未设置原点中心时

   QPainter painter(this);

    for(int i=;i<;i++)
{
painter.save();
painter.rotate(i*);
painter.drawText(,,"");
painter.restore();
}

如上图,可以看到原点位于窗口最左侧. ,并且高度等于最右边位置

示例2-设置原点中心后:

    static int rotate = ;
QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing,true); painter.translate(width()/,height()/); painter.drawRect(-,-,,); painter.setFont(QFont(,)); for(int i=;i<;i++)
{
painter.save(); painter.rotate(i*); painter.drawText(,,,,Qt::AlignCenter,QString("%1").arg(i)); painter.restore();
}

效果:

从上图可以看到旋转的同时,文字也跟着倾斜了,接下来,我们来自己写个rotate()函数,不让文字倾斜

示例3-文字不倾斜旋转

/*  point: 文字所在的点
* from_angle : 文字所在的度数
* rotate : 需要旋转的角度,值为-360~360(为负数表示逆时针旋转,为正数表示顺时针旋转)
*/
QPoint Widget::CustomRotate(QPointF point,qreal from_angle,qreal rotate)
{
qreal PI=3.141592653589;
QPointF Tmp;
qreal arc = (rotate-from_angle)/*PI;
qreal Length = qSqrt(point.x()*point.x() +point.y()*point.y());
Tmp.setX(Length*qCos(arc));
Tmp.setY(Length*qSin(arc));
return Tmp.toPoint();
}
void Widget::paintEvent(QPaintEvent *)
{
int angle = ;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.translate(width()/,height()/);
painter.drawRect(-,-,,);
painter.setFont(QFont(,));
QPoint point(,); //从(100,0)开始填文字 for(int i=;i<;i++)
{
painter.drawText(point.x()-,point.y()-,,,Qt::AlignCenter,QString("%1").arg(i));
point=CustomRotate(point,angle, ); //以当前angle度,顺时针旋转36度
angle -=; //更新度数,由于顺时针,所以用减
}
}

效果:

示例4-通过选择加载图片实现等待效果

以下面图片为例:

代码如下:

Widget::Widget(QWidget *parent) :
QWidget(parent),
m_rotate(false)
{
resize(,);
connect(&timer,SIGNAL(timeout()),this,SLOT(timerout()));
timer.start();
} void Widget::timerout()
{
m_rotate =true;
update();
} void Widget::paintEvent(QPaintEvent *)
{
static int rotate = ;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.translate(width()/,height()/); if(m_rotate)
{
rotate = (rotate+)%;
m_rotate =false;
} painter.rotate(rotate);
QPixmap pix(":wait");
painter.drawPixmap(-pix.width()/,-pix.height()/,pix);
}

有了以上知识后,接下来我们就可以制作一个表盘控件了,接下来学习:

32.QT-制作最强电压电阻表盘,可以自定义阴影效果,颜色,图标,文字标签等-附带demo程序

31.QPainter-rotate()函数分析-文字旋转不倾斜,图片旋转实现等待的更多相关文章

  1. iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度

    1.让图片旋转 UIImageView *imageView = [[UIImageView alloc]init]; imageView.frame = CGRectMake(50, 50, 200 ...

  2. jQuery旋转插件jqueryrotate 图片旋转

    "jquery.rotate.min.js"是jQuery旋转rotate插件,支持Internet Explorer 6.0+ .Firefox 2.0 .Safari 3 .O ...

  3. ios手机竖屏拍照图片旋转90°问题解决方法

    手机拍照会给图片添加一个Orientaion信息(即拍照方向),如下: 用ios手机拍照,系统会给图片加上一个方向的属性, ios相机默认的拍照方向是后摄Home键在右为正,前摄Home键在左为正. ...

  4. js实现图片旋转、模板文件查看图片大图之记录篇[二]

    一个小小的前端需求送给大家,使用js实现图片旋转,并且点击图片能够实现规定格式的大图. 主要使用的是jQuery的delegate()方法实现图片旋转,该方法主要的功能就是给某个组件绑定一个或一组事件 ...

  5. 基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效

    本文分享几种基于HTML5+CSS3实现的一些动画特效:图片旋转.无限滚动.文字跳动;实现起来均比较容易,动手来试试! 一.图片旋转 效果图如下: 这个效果实现起来其实并不困难.代码清单如下: < ...

  6. moviepy音视频剪辑:使用rotate函数实现视频变换处理以及参数expand取值为True时的花屏问题解决方案

    ☞ ░ 前往老猿Python博文目录 ░ 一.rotate函数功能介绍 moviepy的rotate函数用于将剪辑逆时针旋转指定的角度或弧度. 调用语法:rotate(clip, angle, uni ...

  7. split(),preg_split()与explode()函数分析与介

    split(),preg_split()与explode()函数分析与介 发布时间:2013-06-01 18:32:45   来源:尔玉毕业设计   评论:0 点击:965 split()函数可以实 ...

  8. string函数分析

    string函数分析string函数包含在string.c文件中,经常被C文件使用.1. strcpy函数原型: char* strcpy(char* str1,char* str2);函数功能: 把 ...

  9. start_amboot()函数分析

    一.整体流程 start_amboot()函数是执行完start.S汇编文件后第一个C语言函数,完成的功能自然还是初始化的工作 . 1.全局变量指针r8设定,以及全局变量区清零 2.执行一些类初始化函 ...

随机推荐

  1. GodMode

    将“GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}”(不含引号)复制过去,保存即可.

  2. CDN随笔

    CDN的理解:(1)CDN (内容分发网络)加速用户获取数据的 系统(2)部署在离用户最近的网络节点上(3)命中CDN 不需要访问后端服务器(4)互联网公司自己搭建或租用

  3. 利用Socket 实现多客户端的请求与响应

    import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Serve ...

  4. 推导正交投影(Orthographic Projection)

    定义六个面 left right bottom top near far   然后三个轴分开考虑 x轴 视椎体的x范围在[l,r],我们要变换到[-1,1] 1 减去l变换到[0, r-l] 2 乘以 ...

  5. Oracle ebs 数据脱敏

    https://blog.csdn.net/pan_tian/article/details/16120351Data Masking可对数据进行不可逆的去身份化后,再用于非生产环境,同时自动保留引用 ...

  6. Android-Could not download kotlin-reflect.jar

    在AndroidStudio中报以下错误: 错误详情: Could not download kotlin-reflect.jar (org.jetbrains.kotlin:kotlin-refle ...

  7. Must Know Tips/Tricks in Deep Neural Networks

    Must Know Tips/Tricks in Deep Neural Networks (by Xiu-Shen Wei)   Deep Neural Networks, especially C ...

  8. Docker应用:Hello World

    前言: 最近学习了Docker相关技术点,国内关于Docker的资料大多是基于Linux系统的,但是我对Linux又不熟(实际上没用过,掩面哭笑.Jpg). 好在在Win10下也是支持Docker的, ...

  9. JMagic 操作 ImageMagick 处理图片

    项目描述 imagemagick是功能强大的图片处理库,以稳定及高效率著称,众多语言对该库进行封装处理.比如php.java.由于我们是java项目,直接使用java通过JNI技术调用ImageMag ...

  10. Spring Boot(八):RabbitMQ 详解

    RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将 RocketMQ 捐献给了 ...