首页 > 其他分享 >Qt使用图片旋转绘制圆环,圆弧类UI界面(方法可适用于winform和WPF等其余UI绘制)

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

时间:2023-02-08 13:45:31浏览次数:33  
标签:Qt 120 lstLabel UI 坐标 绘制 6.28 图片

先上效果图:

 

 这个主要是一个试剂杯盘的循环图,相信大家伙一定都想到了使用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,120,lstLabel,UI,坐标,绘制,6.28,图片
From: https://www.cnblogs.com/jyj666/p/17101429.html

相关文章

  • MAUI中如何打开应用商店应用详情页
    ​        ​public​ ​Task​<​bool​> ​OpenStoreAppDetails​()​        {​            ​return​ ​OpenStoreAppDeta......
  • Qt动画
    一、介绍类名功能介绍QAbstractAnimation动画基类提供基本的动画属性和接口,它有两个子类QVariantAnimation和QAnimationGroup。QAbstractAnimation是其......
  • Lombok requires enabled annotation processing: Do you want to enable annotation
    IntelliJ IDEA启动springboot项目时出现提示“Lombokrequiresenabledannotationprocessing:Doyouwanttoenableannotationprocessors?”解决方案:Preferenc......
  • buildroot 编译 You seem to have the current working directory in your PATH envi
    通过脚本查看得出结论buildroot-2022.02.1/support/dependencies/dependencies.shPATH里面不能同时存在::以及结尾不能是:如果$PATH最后一个是:那么补上一行$PATH/o......
  • QT使用画家设置背景图片
    protected:voidpaintEvent(QPaintEvent*);voidPet::paintEvent(QPaintEvent*){//重写自动执行QPixmappixmap=QPixmap("./images/background.jpg").......
  • 【Qt】-学Qt前的准备
    文章目录​​1Qt概述​​​​1.1什么是Qt​​​​2创建第一个Qt程序​​​​3命名规范以及快捷键​​​​3.1.pro文件介绍​​​​3.2.h文件介绍​​​​3.3命名规范......
  • weui的模板
    <!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><!--viewport是自动适配手机屏幕的大小的--><metaname="viewport"content="width=device......
  • Qt QLabel设置字体大小
    方法一(使用ui布局):选中label控件搜索“font” 修改pointsize后面的值方法二(使用代码):设置字体大小使用QFont的setPontSize1QLabel*lb=newQLabel(tr("examp......
  • Qt QLabel设置字体、大小、加粗等
    QFontfont(“MicrosoftYaHei”,10,75);//第一个属性是字体(微软雅黑),第二个是大小,第三个是加粗(权重是75)ui->label->setFont(font);常见权重QFont::Light-25高亮QF......
  • PyQt 主窗口、子窗口交互
    主窗口main.pyfromPySide6.QtCoreimport(QCoreApplication,QDate,QDateTime,QLocale,QMetaObject,QObject,QPoint,QRect,QSize,QTime,QUrl,Qt)fr......