• 2935阅读
  • 6回复

Qt圆形透明图片(图像)不断旋转的效果怎么弄? [复制链接]

上一主题 下一主题
离线ustone
 

只看楼主 倒序阅读 楼主  发表于: 2018-05-31
我试了一下,效果不理想,主要是图片旋转以后包围的矩形大小变了,为了看效果,先用不透明图片:



主要源代码如下:
#include "dialog.h"#include "ui_dialog.h"#include <QTimer>
Dialog::Dialog(QWidget *parent) :    QDialog(parent),    ui(new Ui::Dialog){    ui->setupUi(this);    pix=QPixmap("./res/e.jpg");    ui->label->setScaledContents(true);    ui->label->setPixmap(pix);    timer=new QTimer(this);    timer->setInterval(50);    connect(timer,SIGNAL(timeout()),this,SLOT(onTimer()));    angle=0;}
Dialog::~Dialog(){    delete ui;}
void Dialog::on_pushButton_clicked(){    if(timer->isActive())        timer->stop();    else        timer->start();}
void Dialog::onTimer(){    angle+=2;    angle%=360;    QMatrix matrix;    matrix.rotate(angle);    QPixmap rpix;    rpix=pix.transformed(matrix);    ui->label->setPixmap(rpix);}
离线ustone

只看该作者 1楼 发表于: 2018-05-31
主要源代码如下:
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. #include <QTimer>
  4. Dialog::Dialog(QWidget *parent) :
  5.     QDialog(parent),
  6.     ui(new Ui::Dialog)
  7. {
  8.     ui->setupUi(this);
  9.     pix=QPixmap("./res/e.jpg");
  10.     ui->label->setScaledContents(true);
  11.     ui->label->setPixmap(pix);
  12.     timer=new QTimer(this);
  13.     timer->setInterval(50);
  14.     connect(timer,SIGNAL(timeout()),this,SLOT(onTimer()));
  15.     angle=0;
  16. }
  17. Dialog::~Dialog()
  18. {
  19.     delete ui;
  20. }
  21. void Dialog::on_pushButton_clicked()
  22. {
  23.     if(timer->isActive())
  24.         timer->stop();
  25.     else
  26.         timer->start();
  27. }
  28. void Dialog::onTimer()
  29. {
  30.     angle+=2;
  31.     angle%=360;
  32.     QMatrix matrix;
  33.     matrix.rotate(angle);
  34.     QPixmap rpix;
  35.     rpix=pix.transformed(matrix);
  36.     ui->label->setPixmap(rpix);
  37. }


离线ustone

只看该作者 2楼 发表于: 2018-05-31
用了一个办法,根据变形后的图片,不断改变label的大小和位置(保持中心位置不变)。图片显示不缩放。
离线never_forget

只看该作者 3楼 发表于: 2018-06-01
你这个是什么问题啊 ?你是不是想让外面那个白色的框看不见啊,你改成 PNG 不就行了嘛~
离线ustone

只看该作者 4楼 发表于: 2018-06-01
回 never_forget 的帖子
never_forget:你这个是什么问题啊 ?你是不是想让外面那个白色的框看不见啊,你改成 PNG 不就行了嘛~ (2018-06-01 17:08) 

原来label是固定大小的,图片旋转以后大小就变了。现在使label随着旋转图片的大小而变,保持中心位置,就解决了。
离线stlcours

只看该作者 5楼 发表于: 2018-06-01
离线ustone

只看该作者 6楼 发表于: 2018-06-02
回 stlcours 的帖子
stlcours:https://blog.csdn.net/goforwardtostep/article/details/55224578 (2018-06-01 21:04) 

这个是旋转窗口,绕Y轴。
快速回复
限100 字节
 
上一个 下一个