31.QPainter-rotate()函数分析-文字旋转不倾斜,图片旋转实现等待
在上章和上上上章:
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()函数分析-文字旋转不倾斜,图片旋转实现等待的更多相关文章
- iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度
1.让图片旋转 UIImageView *imageView = [[UIImageView alloc]init]; imageView.frame = CGRectMake(50, 50, 200 ...
- jQuery旋转插件jqueryrotate 图片旋转
"jquery.rotate.min.js"是jQuery旋转rotate插件,支持Internet Explorer 6.0+ .Firefox 2.0 .Safari 3 .O ...
- ios手机竖屏拍照图片旋转90°问题解决方法
手机拍照会给图片添加一个Orientaion信息(即拍照方向),如下: 用ios手机拍照,系统会给图片加上一个方向的属性, ios相机默认的拍照方向是后摄Home键在右为正,前摄Home键在左为正. ...
- js实现图片旋转、模板文件查看图片大图之记录篇[二]
一个小小的前端需求送给大家,使用js实现图片旋转,并且点击图片能够实现规定格式的大图. 主要使用的是jQuery的delegate()方法实现图片旋转,该方法主要的功能就是给某个组件绑定一个或一组事件 ...
- 基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效
本文分享几种基于HTML5+CSS3实现的一些动画特效:图片旋转.无限滚动.文字跳动;实现起来均比较容易,动手来试试! 一.图片旋转 效果图如下: 这个效果实现起来其实并不困难.代码清单如下: < ...
- moviepy音视频剪辑:使用rotate函数实现视频变换处理以及参数expand取值为True时的花屏问题解决方案
☞ ░ 前往老猿Python博文目录 ░ 一.rotate函数功能介绍 moviepy的rotate函数用于将剪辑逆时针旋转指定的角度或弧度. 调用语法:rotate(clip, angle, uni ...
- split(),preg_split()与explode()函数分析与介
split(),preg_split()与explode()函数分析与介 发布时间:2013-06-01 18:32:45 来源:尔玉毕业设计 评论:0 点击:965 split()函数可以实 ...
- string函数分析
string函数分析string函数包含在string.c文件中,经常被C文件使用.1. strcpy函数原型: char* strcpy(char* str1,char* str2);函数功能: 把 ...
- start_amboot()函数分析
一.整体流程 start_amboot()函数是执行完start.S汇编文件后第一个C语言函数,完成的功能自然还是初始化的工作 . 1.全局变量指针r8设定,以及全局变量区清零 2.执行一些类初始化函 ...
随机推荐
- WebPackBrows
一个http工具,通过java编写 调用方法 s.y.webpackbrows.fac.WebPackFactor.getConnection 还会继续完善 下载位置 https://pan.baid ...
- 《HTTP权威指南》2-URL
前言 在一个城市中,所有的东西都有一个标准化的名字,以帮助人们寻找城市中的各种资源,如宁波火车站地铁站,在因特网这座大城市中,URL就是其标准化名称,它指向每一条电子信息,告诉你它们位于何处,以及如何 ...
- day_11函数的形参与实参
昨天讲了函数的定义和简单分类 1:什么是函数:具体特定功能的代码快 --特定功能代码作为一个整体,并给该整体命名,就是函数. 函数的优点: 1:减少代码的冗余 2:结构清晰,可读性强 3:具有复用性, ...
- Java编程实现多线程TCP服务器完整实例
Socket ·功能:TCP客户端套接字 ·构造方法: Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号 · ...
- python爬虫学习之正则表达式的基本使用
一.正则表达式 1. 正则表达式是字符串处理的有力工具和技术. 2. 正则表达式使用某种预定义的模式去匹配一类具有共同特征的字符串,主要用于处理字符串,可以快速.准确地完成复杂的查找.替换等处理要求, ...
- go语言面向对象编程之类型系统
go语言类型系统 类型系统,顾名思义是指一个语言的类型体系结构,一个典型的类型系统通常包含如下基本内容 基础类型:如byte,int,bool,float等 复合类型:如数组,指针,结构体 可以指向任 ...
- 全栈开发工程师微信小程序-上(中)
全栈开发工程师微信小程序-上(中) width: 750rpx; 750rpx代表与屏幕等宽,rpx的缩写responsive pixel,这个单位是可以根据屏幕大小进行自适应调整的像素单位. 小程序 ...
- 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...
- asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案
之前碰到asp.net core异步进行新增操作并且需要判断某些字段是否重复的问题,进行插入操作的话会导致数据库中插入重复的字段!下面把我的解决方法记录一下,如果对您有所帮助,欢迎拍砖! 场景:EFC ...
- vue Do not use built-in or reserved HTML elements as component id: nav
刚入坑vue 在新建组件的时候出现这个问题,原因是我新建的这个组件name: 'nav' 在vue中好像nav 这样的 有点类似于 “关键字” 不能作为组件的name,按照服务端来说 就是不可以命名关 ...