先上效果图:

这个主要是一个试剂杯盘的循环图,相信大家伙一定都想到了使用GDI和三角函数来进行计算,但如果没有实际尝试,可能会踩一些坑,留此文帮助大家方便快捷的绘制出类似圆环的UI效果。

这里主要是使用图片的三角函数来计算图片的定标位置,然后确定图片在坐标系中的绝对坐标或者相对坐标,我们先来看具体代码:

for (int i = 0; i < 16; ++i)
{
     lstLabel[i]->setScaledContents(true);
lstLabel[i]->setParent(ui->widgetReagent);
lstLabel[i]->setScaledContents(true);
     //120是大圆环半径,+的150是x坐标和y坐标的偏移(就是圆心坐标离坐标系原点的位置偏移)
lstLabel[i]->move(static_cast<int>((qSin((i * 6.28) / 16.0) * 120) + 150),static_cast<int>((qCos((i * 6.28) / 16.0) * 120) + 150));
}

  这时候有小伙伴可能会问这个6.28是什么意思,圆周率是3.14,我们这边6.28就是2*3.14,这里的 qSin((i * 6.28) / 16.0) * 120 就是图片的x坐标, qCos((i * 6.28) / 16.0) * 120 是图片的y坐标(具体证明方法略,初中简单的三角函数自己看一下就会)。

  但是这个图就和地球公转自转一样,如果你只写了上面那段代码你会发现你最后得出的图是这样的:

  

因此这边需要再加上图片本身的旋转,这其实比上面的难计算一点,因为请注意看图:

这边是有原图片的白色背景的,那么很显然我们不能这样交付给客户,此时有两种方法(不找美工换图的情况下)解决此问题:

1.增大圆弧的半径。

2.进行图片的角度旋转。

这边我介绍的就是图片的角度旋转,因为一共是16张图片,一圈是360度,因此图片1和图片2的旋转角度应该是相差360/16=22.5度。

就是说图1是原图,就是美工提供给你的基图,2,3等等是经过你旋转之后的图。旋转部分代码为:

   QImage t = QImage("://image/test.png");
QPixmap map = QPixmap::fromImage(t);
map.scaled(QSize(35,35), Qt::KeepAspectRatio);
  for(int i=0;i<16;i++)
{
QLabel *lbl= new QLabel();
lstLabel.append(lbl); QMatrix matrix;
matrix.rotate(22.5*(16-i));
lstMatrix.append(matrix); lstLabel[i]->setFixedSize(35,35);
} lstLabel[0]->setPixmap(map);
lstLabel[1]->setPixmap(map.transformed(lstMatrix[1], Qt::SmoothTransformation));
  ***以下略***

  这边务必注意这个图片的size和label的size,否则就会出现图片背景冲突重叠的情况。

 

Qt使用图片旋转绘制圆环,圆弧类UI界面(方法可适用于winform和WPF等其余UI绘制)的更多相关文章

  1. QT 实现图片旋转的两种方法

    第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rota ...

  2. 一个 Qt 显示图片的控件(继承QWidget,使用QPixmap记录图像,最后在paintEvent进行绘制,可缩放)

    Qt 中没有专门显示图片的控件,通常我们会使用QLabel来显示图片.但是QLabel 显示图片的能力还是有点弱.比如不支持图像的缩放一类的功能,使用起来不是很方便.因此我就自己写了个简单的类. 我这 ...

  3. Qt Widgets——抽象旋转框及其继承类

    默认外观分别如下(win7,与上述顺序对应): 可看出,都是由一个可编辑的文本框及右端小箭头组成 QAbstractSpinBox 属性简单解释如下: Properties accelerated : ...

  4. QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)

    背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再 ...

  5. qt 在ui界面添加控件后在cpp文件中无法调用?

    问题:qt 在ui界面添加控件后在cpp文件中无法调用? 解决方法:在build选项中选择“重新build项目”,再次在cpp中调用添加的控件发现可以调用了. 还有一种情况导致添加控件后无法调用,就是 ...

  6. 第165天:canvas绘制圆环旋转动画

    canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...

  7. Qt5:Qt中图片的翻转,旋转,缩放,扭曲操作

    具体用到了  mirror()  shear()  scaled() translate() rotate() 等函数函数等会儿再写 (其中  translate() 和 rotate() 俩函数组合 ...

  8. Android 绘制圆环

    使用画圆弧的方式绘制圆环和进度条,使用sweepGradient进行渐变. 参考链接 http://blog.csdn.net/u011494050/article/details/39251239 ...

  9. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  10. iOS_UIImage_图片旋转

    一.目的: 有时候我们获得到的图片我们不是我们想要的方向,需要对图片进行旋转.比如:图片旋转90度180度等. 二.实现过程. 1.获取到该UIImage. 2.开启上下文. 3.上下文的具体操作. ...

随机推荐

  1. 分布式协议与算法-Quorum NWR

    1.强一致性与最终一致性 1.1强一致性 强一致性能保证写操作完成后,任何后续访问都能读到更新后的值:强一致性可以保证从库有与主库一致的数据.如果主库突然宕机,我们仍可以保证数据完整.但如果从库宕机或 ...

  2. BUG日记---SSM进行多表查询错误-----页面使用<c:foreach>错误

    javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over su ...

  3. java入门与进阶P-6.1+P-6.2

    字符类型 字符型char在Java语言中占用 2 个字节,char类型的字面量必须使用半角的单引号括起来,取值范围为[ 0 - 65535 ],char 和 short 都占用 2 个字节,但是 ch ...

  4. 穿透的switch语句-循环概述与基本组成部分

    穿透的switch语句 在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束. pu ...

  5. python3异常打印堆栈信息

    import traceback try: a=1/0 except: print(traceback.format_exc())

  6. 神经网络基础部件-BN层详解

    一,数学基础 1.1,概率密度函数 1.2,正态分布 二,背景 2.1,如何理解 Internal Covariate Shift 2.2,Internal Covariate Shift 带来的问题 ...

  7. QT 5 中文乱码,试试在PRO文件加入这几行代码

    msvc{ QMAKE_CFLAGS += /utf-8 QMAKE_CXXFLAGS += /utf-8 }

  8. HEU_KMS_Activator_v27.0.2全能系统数字许可激活工具

    HEU_KMS_Activator_v27.0.2全能系统数字许可激活工具 HEU KMS Activator是KMS激活工具,支持激活 Windows XP.Windows 7.Windows 8. ...

  9. Centos7搭建hadoop3.3.4分布式集群

    目录 1.背景 2.集群规划 2.1 hdfs集群规划 2.2 yarn集群规划 3.集群搭建步骤 3.1 安装JDK 3.2 修改主机名和host映射 3.3 配置时间同步 3.4 关闭防火墙 3. ...

  10. JZOJ 3570. 【GDKOI2014】壕壕的寒假作业

    解析 这道题比较水. 求最快什么时候做完作业? 如果要最快完成第i份作业,那么是i的前继那些作业都要完成之后才能够完成i,所以,为了尽快完成i,我们要把i的前继的作业全部先做完. 最慢什么时候做完作业 ...