先上效果图:

这个主要是一个试剂杯盘的循环图,相信大家伙一定都想到了使用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,否则就会出现图片背景冲突重叠的情况。

 

最新文章

  1. threadid=1: thread exiting with uncaught exception (group=0xb2a86d70)
  2. IBM appscan 9.0破解版分享
  3. 64位系统使用Access 数据库文件的彻底解决方法
  4. LINQ 嵌套查询
  5. Java中重点关键词的区分
  6. struts_22_xwork校验器列表使用说明
  7. linux定时
  8. 程序员必须知道的几个国外IT网站
  9. 20160326 javaweb 请求转发和请求包含
  10. 【VC】Dialog 窗体随意切割子窗体。
  11. Git配合Tag的代码回滚
  12. SNS团队第一次站立会议(2017.04.22)
  13. 用JAVA自己画一张二维码
  14. java中的@Override标签
  15. 【转】Javascript错误处理——try…catch
  16. python学习笔记2_条件循环和其他语句
  17. SQLServer之修改索引
  18. C++程序设计方法2:基本语法
  19. 一、J2EE
  20. 关于Altium Designer 提示发送错误报告解决方法

热门文章

  1. 把KMP算法嚼碎了喂给你吃!(C++)
  2. BC7-牛牛的字符矩形
  3. Python 内置界面开发框架 Tkinter入门篇 乙
  4. Java 进阶P-11+P-12
  5. Node.js学习笔记----day01
  6. 真正“搞”懂HTTP协议11之代理服务
  7. Rust 的PIN的作用图
  8. LG P3803 【模板】多项式乘法
  9. Ubuntu环境下利用Apache2部署多个站点
  10. VUE子组件使用父组件值并赋值